java解析证书具有两种方式,

1.为证书的标准格式,java通过jdk进行对标准证书进行base64解密转换、解析,由于网上对于该方式的描述较多,本文不做过多描述。

2.第二种方式为java去除了开头的“-----BEGIN CERTIFICATE-----”以及中间的“/n”末尾的“-----END CERTIFICATE-----”

备注:第一种方式可通过代码处理去除证书文件的分隔符以及开头结尾标识转为第二种情况

只剩下了内容。

  public static PublicKey verify_cert(String caPath,String userBase64,String userName) throws InvalidKeyException, CertificateException, NoSuchAlgorithmException, NoSuchProviderException, IOException {Security.addProvider(new BouncyCastleProvider());// 读取 ca 证书 文件,获取证书的 公钥String certString = readFile(new File(caPath));String replace = certString.replace("-----BEGIN CERTIFICATE-----", "").replaceAll(System.lineSeparator(), "").replace("-----END CERTIFICATE-----", "");BASE64Decoder decoder = new BASE64Decoder();byte[] cetba = decoder.decodeBuffer(replace);InputStream inStream = new ByteArrayInputStream(cetba);CertificateFactory cf = CertificateFactory.getInstance("X.509","BC");X509Certificate ca_52_cert =  (X509Certificate)cf.generateCertificate(inStream);PublicKey ca_52_publicKey = ca_52_cert.getPublicKey();// 读取个人证书,获取证书,以及公钥byte[] userByte = decoder.decodeBuffer(userBase64);ByteArrayInputStream fis_ra = new ByteArrayInputStream(userByte);X509Certificate user_52_cert = (X509Certificate)cf.generateCertificate(fis_ra);PublicKey user_52_certPublicKey = user_52_cert.getPublicKey();return user_52_certPublicKey;}

java支持pksc8格式的私钥文件读取,把拿到的pksc1格式私钥转换为pksc8格式

证书私钥文件转换

1.openssl

2.pkcs8 -topk8 -inform PEM -in ca.key -outform pem -nocrypt -out pkcs8_ca_test.key

读取私钥获得转为私钥对象

/*** 从私钥文件当中读取私钥文件* @param file* @return* @throws IOException*/public static String readFile(File file) throws IOException {InputStream in = null;ByteArrayOutputStream out = null;try {in = new FileInputStream(file);out = new ByteArrayOutputStream();byte[] buf = new byte[1024];int len = -1;while ((len = in.read(buf)) != -1) {out.write(buf, 0, len);}out.flush();byte[] data = out.toByteArray();return new String(data);} finally {out.close();in.close();}}/*** 通过私钥文件读取加载为私钥对象* @param replace 去除私钥格式后的cks8字符串*/public static PrivateKey get( String replace) throws Exception {
//        byte[] keyBytes = Files.readAllBytes(Paths.get(filename));BASE64Decoder decoder = new BASE64Decoder();byte[] cetba = decoder.decodeBuffer(replace);PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(cetba);KeyFactory kf = KeyFactory.getInstance("RSA");return kf.generatePrivate(spec);}/*** 用公钥解密* @param privateDataBase64      密文* @param publicKey 公钥* @return* @throws Exception*/public static byte[] decryptByPublicKey(String privateDataBase64, PublicKey publicKey) throws Exception {byte[] privateDataBytes = decryptBASE64(privateDataBase64);KeyFactory keyFactory = KeyFactory.getInstance("RSA");Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE, publicKey);return cipher.doFinal(privateDataBytes);}/*** 用私钥加密* @param data       明文* @param privateKey 私钥* @return* @throws Exception*/public static byte[] encryptByPrivateKey(byte[] data, PrivateKey privateKey) throws Exception {KeyFactory keyFactory = KeyFactory.getInstance("RSA");Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, privateKey);return cipher.doFinal(data);}public static byte[] decryptBASE64(String key) throws Exception {return (new BASE64Decoder()).decodeBuffer(key);}public static String encryptBASE64(byte[] key) throws Exception {return (new BASE64Encoder()).encodeBuffer(key);}

java 对证书文件以及秘钥.key的解析相关推荐

  1. Java 通过证书文件获取私钥

    java通过证书文件获取私钥 import org.springframework.core.io.ClassPathResource;import java.util.Arrays; import ...

  2. java中secretkey,java生成秘钥key,并保存秘钥到文件中

    本例子采用的是Java的对称加密其中的一种方式(3DES),其他的加密方式也类似.生成一个key秘钥,发送方使用生成的key秘钥进行加密操作,然后把生成的key秘钥保存到文件中,提供给需要解密的一方使 ...

  3. java项目的秘钥怎么保存_java生成秘钥key,并保存秘钥到文件中

    本例子采用的是Java的对称加密其中的一种方式(3DES),其他的加密方式也类似.生成一个key秘钥,发送方使用生成的key秘钥进行加密操作,然后把生成的key秘钥保存到文件中,提供给需要解密的一方使 ...

  4. 【Java编程系列】JWT秘钥生成

    热门系列: [算法系列]实战篇:Diffie-Hellman算法实现通信秘钥流程 目录 1.JWT简介 2.JWT的优缺点 3.JWT组成部分 4.JWT的使用 4.1 生成公钥私钥命令 4.2 JW ...

  5. java 微信证书文件,CertificateDownloader

    Certificate Downloader Certificate Downloader 是 Java 微信支付 APIv3 平台证书的命令行下载工具.该工具可从 https://api.mch.w ...

  6. java 微信证书文件_JAVA微信企业付款如何使用证书、证书调用实例

    代码如下:修改证书路径跟密码即可 KeyStore keyStore  = KeyStore.getInstance("PKCS12"); FileInputStream inst ...

  7. Https环境将key秘钥和crt格式证书转成cer证书

    1.去除秘钥*.key的加密保护: openssl genrsa -des3 -out ca.key 4096#CA证书用于签署客户端证书 openssl req -new -x509 -days 3 ...

  8. 最新!中国天气网api接口调用,key获取方式,数据请求秘钥获取,城市id获取方法

    以前的天气获取方式已经不支持了,虽然能获取到数据,但是获取到的信息已经不对了. 中国天气网提供的最新接口需要数据请求秘钥key.而且有效期只有7天,用完了还要重新购买,很麻烦,但是获取到的内容绝对是最 ...

  9. 中国天气网api接口调用,key获取方式,数据请求秘钥获取,城市id获取方法

    以前的天气获取方式已经不支持了,虽然能获取到数据,但是获取到的信息已经不对了. 中国天气网提供的最新接口需要数据请求秘钥key.而且有效期只有7天,用完了还要重新购买,很麻烦,但是获取到的内容绝对是最 ...

最新文章

  1. WIN API当中的堆管理,虚拟内存及常规复制,移动,填充代码
  2. 一份数据分析学习清单.xls
  3. 盘点神奇却少为人知的IntelliJ IDEA快捷键
  4. POJ 1442 Black Box(大小堆,求第K小的元素)
  5. 黑群晖给局域网电脑发消息_老电脑搭建家用NAS,省钱又好用
  6. Spring mvc4 + ActiveMQ 整合
  7. 投入工作与生活幸福,并非简单对立
  8. Linux网络抓包分析工具(tcpdump、wireshark)
  9. 11计算机专业vb试题答案,11高三计算机专业VB试题(三)
  10. LR证书过期解决办法
  11. 「节能学院」浅谈智能安全配电装置在养老福利单位的研究与应用
  12. 安卓搞机玩机-什么是“锁 ” BL锁 屏幕锁 账号锁 设备锁等分析
  13. Civil3D2018-01使用配置
  14. IDEA如何自动/手动导入包
  15. cad放大_cad快捷键+鼠标操作,全了!
  16. android bp文件_Android 基础 | Android.bp 语法浅析
  17. Bad Smell (代码的坏味道)
  18. 深入浅出filament Android编译脚本
  19. Markdown图片路径的改变方法
  20. 景安服务器密码修改,[景安网络]提示页

热门文章

  1. Windows内核--CreateProcess到内核NtCreateProcess(2.3)
  2. 想听一首歌好难?程序员教你一键下载
  3. 乐山持点科技:抖音杠上腾讯,上架简洁版“微信”
  4. Ardunio Nano 无法上传解决办法
  5. c语言strtok函数完美实现
  6. js文本内容显示6行,超出6行出现显示更多按钮,css样式超出行数只能使用...去替代
  7. 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
  8. 微信聊天记录导出工具WeChatExporter开源啦!
  9. Stata实证分析带做
  10. java开发oa系统的目的_JAVA开发的OA系统价值体现