做公司项目遇到了关于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文件相关推荐

  1. java 解析 csv 文件

    文章分类:JavaEye 一.貌似有bug,不行用 二.或 三. 的方法 Java代码   import java.io.BufferedReader; import java.io.FileInpu ...

  2. 用正则表达式和java解析csv文件

    用正则表达式和java解析csv文件 作者:弹着钢琴设计  来源:博客园  发布时间:2009-06-15 18:31  阅读:337 次  原文链接   [收藏]   在解析csv文件之前,先来看看 ...

  3. java解析dxf文件_浅析JVM方法解析、创建和链接

    一:前言 上周末写了一篇文章<你知道Java类是如何被加载的吗?>,分析了HotSpot是如何加载Java类的,干脆趁热打铁,本周末再来分析下Hotspot又是如何解析.创建和链接类方法的 ...

  4. java解析xml文件

    使用java解析xml文件,通过dom4j. 代码如下: package com.java.team; import java.io.File; import java.util.ArrayList; ...

  5. java解析Excel文件

    下文介绍java解析Excel文件的方案 前置准备 1.第三方jar包或者Maven配置 org.apache.poi的jar包 Maven配置如下 <groupId>org.apache ...

  6. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  7. JAVA解析.xlsb文件

    Java解析.Xlsb文件 pom.xml <dependency><groupId>org.apache.poi</groupId><artifactId& ...

  8. java解析xml文件的几种方式(DOM解析)

    好久不用的东西,今天居然被面试官问到了.那既然这样,我们就一起回顾下java解析xml文件的几种方式吧. DOM解析 dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手 ...

  9. Java解析yaml文件

    Java解析yaml文件 1. 什么是yaml ? 2. 导入maven依赖 3. yaml 案例文件 4. 示例代码 5. 解析结果 1. 什么是yaml ? 参考下方链接 yaml快速入门 2. ...

最新文章

  1. REST 架构是什么
  2. cxf 发布 一个简单的 webservice
  3. python聊天程序
  4. mysql 5中的store function
  5. sping jdbc 链接mysql_Spring Boot JDBC 连接数据库示例
  6. minitab怎么算西格玛水平_六西格玛黑带培训工具因子分析的使用
  7. mybatis入门基础(四)----输入映射和输出映射
  8. BZOJ1050 [HAOI2006]旅行comf
  9. PostgreSQL 12系统表(1)pg_class
  10. 集五福开奖啦!六年累计7亿人参加 今年你中了多少?
  11. cvs数据导入工具 oracle_oracle数据库的导入导出
  12. 训练赛20160403
  13. JAVA 基础之 多线程
  14. 金蝶云·星空——采购入库单生成凭证取不到价税合计
  15. 年薪50万的程序员_2018年这类程序员工资最高!年薪50万只能算一般
  16. 计算机开机显示器闪,电脑开机后显示器闪烁怎么办
  17. 阿里云天池——SQL训练计划_Task3
  18. Fluent的porous jump边界条件
  19. FPGA之VGA转HDMI之并行串行转换模块编写
  20. 获得KKR领投的2亿美元融资的公司,究竟随手记怎么样靠谱吗?

热门文章

  1. Chrome好用插件推荐
  2. 新手学美发的最基本知识
  3. PHP 开发 ThinkPHP6 框架学习 一
  4. 妙味课堂WEB前端开发全套教程无加密版
  5. 麦当劳,肯德基等店排班时根据营业额预估需要人手的软件,原理是什么?
  6. 大家信夫信用服务之普惠金融的长痛
  7. win7 开始 计算机箭头,win7系统开机黑屏屏幕上一个箭头的解决办法
  8. 东南大学考研计算机基础大纲,2018东南大学计算机科学与工程学院专业基础课程考试大纲及题型分布...
  9. 苹果屏蔽更新_如何屏蔽苹果系统自动更新(原tv文件已失效)
  10. Linux 是一种开源的网络游戏