Java解析p12文件
做公司项目遇到了关于GoogleBigQuery的问题,而要使用这个服务需要一个证书,要求支持json和p12文件两种格式。这里主要记录一下如何从p12文件中读取出公钥和私钥信息。
import sun.misc.BASE64Encoder;import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Key;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;import java.io.*;
import java.util.Base64;
import java.util.Enumeration;public class ReadP12Cert {public static void main(String[] args) {//文件路径final String KEYSTORE_FILE = "yourfilename";//生成p12文件时的密码,Google的统一密码是"notasecret"final String KEYSTORE_PASSWORD = "p12secret";final String KEYSTORE_ALIAS = "alias";try {KeyStore ks = KeyStore.getInstance("PKCS12");InputStream fis = new FileInputStream(KEYSTORE_FILE);char[] nPassword = null;if ((KEYSTORE_PASSWORD == null) || KEYSTORE_PASSWORD.trim().equals("")) {nPassword =null;} else {nPassword = KEYSTORE_PASSWORD.toCharArray();}//循环获取别名Enumeration enumm =ks.aliases();String keyAlias = null;if ( enumm.hasMoreElements()) // we are readin just one certificate.{keyAlias = (String) enumm.nextElement();System.out.println("alias=[" + keyAlias + "]");}// Now once we know the alias, we could get the keys.System.out.println("is key entry=" + ks.isKeyEntry(keyAlias));//第一种获取私钥的方式PrivateKey prikey = (PrivateKey) ks.getKey(keyAlias,nPassword);Certificate cert = ks.getCertificate(keyAlias);PublicKey pubkey = cert.getPublicKey();System.out.println("cert class = " + cert.getClass().getName());System.out.println("cert = " + cert);System.out.println("public key = " + pubkey);//第二种获取私钥的方式,这个是写在KeyStore文档里的,似乎是比较推荐的那种KeyStore.ProtectionParameter protParam = new KeyStore.PasswordProtection(nPassword);KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)ks.getEntry("privatekey", protParam);PrivateKey myPrivateKey = pkEntry.getPrivateKey();//base64解码,获取真正信息byte[] a=myPrivateKey.getEncoded();System.out.println(new BASE64Encoder().encode(a));} catch (Exception e) {e.printStackTrace();}}
}
参考:
https://blog.csdn.net/cuiran/article/details/7816696/
不过我自己还有个疑问,我在前端post上传p12文件,后端通过requst.getInuptStream()获取文件内容,转成InputStream,想要生成KeyStore来获取私钥信息,报错”java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.”,网上搜到的信息大多是maven修改了证书,但和我的情况并不相似。我不知道是否是我在读取过程中编码问题,还是其他什么问题导致我得到的内容和文件内容不一致,困扰良久。而我又不能直接读取文件,必须上传。如果有知道原因的朋友,希望能告诉我一声,谢谢。
Java解析p12文件相关推荐
- java 解析 csv 文件
文章分类:JavaEye 一.貌似有bug,不行用 二.或 三. 的方法 Java代码 import java.io.BufferedReader; import java.io.FileInpu ...
- 用正则表达式和java解析csv文件
用正则表达式和java解析csv文件 作者:弹着钢琴设计 来源:博客园 发布时间:2009-06-15 18:31 阅读:337 次 原文链接 [收藏] 在解析csv文件之前,先来看看 ...
- java解析dxf文件_浅析JVM方法解析、创建和链接
一:前言 上周末写了一篇文章<你知道Java类是如何被加载的吗?>,分析了HotSpot是如何加载Java类的,干脆趁热打铁,本周末再来分析下Hotspot又是如何解析.创建和链接类方法的 ...
- java解析xml文件
使用java解析xml文件,通过dom4j. 代码如下: package com.java.team; import java.io.File; import java.util.ArrayList; ...
- java解析Excel文件
下文介绍java解析Excel文件的方案 前置准备 1.第三方jar包或者Maven配置 org.apache.poi的jar包 Maven配置如下 <groupId>org.apache ...
- XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML
XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...
- JAVA解析.xlsb文件
Java解析.Xlsb文件 pom.xml <dependency><groupId>org.apache.poi</groupId><artifactId& ...
- java解析xml文件的几种方式(DOM解析)
好久不用的东西,今天居然被面试官问到了.那既然这样,我们就一起回顾下java解析xml文件的几种方式吧. DOM解析 dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手 ...
- Java解析yaml文件
Java解析yaml文件 1. 什么是yaml ? 2. 导入maven依赖 3. yaml 案例文件 4. 示例代码 5. 解析结果 1. 什么是yaml ? 参考下方链接 yaml快速入门 2. ...
最新文章
- REST 架构是什么
- cxf 发布 一个简单的 webservice
- python聊天程序
- mysql 5中的store function
- sping jdbc 链接mysql_Spring Boot JDBC 连接数据库示例
- minitab怎么算西格玛水平_六西格玛黑带培训工具因子分析的使用
- mybatis入门基础(四)----输入映射和输出映射
- BZOJ1050 [HAOI2006]旅行comf
- PostgreSQL 12系统表(1)pg_class
- 集五福开奖啦!六年累计7亿人参加 今年你中了多少?
- cvs数据导入工具 oracle_oracle数据库的导入导出
- 训练赛20160403
- JAVA 基础之 多线程
- 金蝶云·星空——采购入库单生成凭证取不到价税合计
- 年薪50万的程序员_2018年这类程序员工资最高!年薪50万只能算一般
- 计算机开机显示器闪,电脑开机后显示器闪烁怎么办
- 阿里云天池——SQL训练计划_Task3
- Fluent的porous jump边界条件
- FPGA之VGA转HDMI之并行串行转换模块编写
- 获得KKR领投的2亿美元融资的公司,究竟随手记怎么样靠谱吗?