java解析密钥格式
- import java.io.StringReader;
- import org.bouncycastle.asn1.ASN1Sequence;
- import org.bouncycastle.asn1.DERBitString;
- import org.bouncycastle.asn1.DEREncodable;
- import org.bouncycastle.asn1.DERObjectIdentifier;
- import org.bouncycastle.asn1.DEROctetString;
- import org.bouncycastle.asn1.DERSequence;
- import org.bouncycastle.asn1.DERTaggedObject;
- import org.bouncycastle.openssl.PEMReader;
- import org.bouncycastle.util.encoders.Base64;
- //bcmail-jdk15-1.46
- //bcprov-jdk15.1.46
- @SuppressWarnings("all")
- public class CheckKeyFormat {
- /**
- * check sm2 PrivateKey Format
- *
- * @author 杜文磊
- *
- * */
- public static void main(String[] args) throws Exception {
- // String key = "-----BEGIN EC PRIVATE KEY-----"
- // + "MHcCAQEEIEzQsN3BumQJd5ri/9boIs8kluKKQNJ7DPxeT4TKSyPkoAoGCCqGSM49"
- // + "AwEHoUQDQgAEnr6UttffZuM/w8QehrCOtFm8FpjgJxHt+qRNcH0je+DSXVBJwZkV"
- // + "7slL7e1VbRe4mh0JsSuLu6XD5P3iHyOnsw=="
- // + "-----END EC PRIVATE KEY-----";
- String key = "-----BEGIN EC PRIVATE KEY-----"
- + "MHcCAQEEIGsDOEC1seWulpvO0N09WmKvCOhMAD0eJY5y1i+0Na6HoAoGCCqBHM9V"
- + "AYItoUQDQgAE450G+j/3ndC+BA30RmbCMjsh12DhGLOwXy8X2VNC8Zb6F9IDgakb"
- + "B47+n2N8ct8tryfMORh08QckBY66PtuUkQ=="
- + "-----END EC PRIVATE KEY-----";
- key = key.replace("-----BEGIN EC PRIVATE KEY-----", "");
- key = key.replace("-----END EC PRIVATE KEY-----", "");
- byte[] decKey = Base64.decode(key);
- DERSequence derSequence = (DERSequence) ASN1Sequence
- .fromByteArray(decKey);
- // 检查 version
- DEREncodable derIntegerValue = checkInteger_Version(derSequence);
- System.out.println("Integer : version = " + derIntegerValue);
- // 检查私钥长度
- DEREncodable derSM2PrivateValue = checkSM2Private_length(derSequence);
- System.out.println("SM2Private : length = "
- + ((DEROctetString) derSM2PrivateValue.getDERObject())
- .getOctets().length);
- // 检查OID
- DERObjectIdentifier derObjOID = checkOID(derSequence);
- System.out.println("OID = " + derObjOID);
- // 检查内容值
- DERBitString derBitEnd = checkContent(derSequence);
- System.out.println("Content = " + derBitEnd.getString());
- if(!derIntegerValue.toString().equals("1")){
- System.out.println(" version is not 1 ! ");
- }
- if(!derObjOID.toString().equals("1.2.156.10197.1.301")){
- System.err.println(" OID Not SM2 private key!");
- // System.exit(0);
- }
- }
- /************************************************************utils******************************************************************/
- private static DERBitString checkContent(DERSequence derSequence) {
- DEREncodable derEnd = derSequence.getObjectAt(3);
- if (!(derEnd.getDERObject() instanceof DERTaggedObject)) {
- System.out.println(false);
- }
- DERTaggedObject derTagEnd = (DERTaggedObject) derEnd.getDERObject();
- if (!(derTagEnd.getObject() instanceof DERBitString)) {
- System.out.println(false);
- }
- DERBitString derBitEnd = (DERBitString) derTagEnd.getObject();
- return derBitEnd;
- }
- /**
- * @see 检查OID
- * @param derSequence
- * @return
- */
- private static DERObjectIdentifier checkOID(DERSequence derSequence) {
- DEREncodable derOID = derSequence.getObjectAt(2);
- if (!(derOID.getDERObject() instanceof DERTaggedObject)) {
- System.out.println(false);
- }
- DERTaggedObject derTagOID = (DERTaggedObject) derOID;
- if (!(derTagOID.getObject() instanceof DERObjectIdentifier)) {
- System.out.println(false);
- }
- DERObjectIdentifier derObjOID = (DERObjectIdentifier) derTagOID
- .getObject();
- return derObjOID;
- }
- /**
- * @see 检查私钥长度
- * @param derSequence
- * @return
- */
- private static DEREncodable checkSM2Private_length(DERSequence derSequence) {
- DEREncodable derSM2PrivateValue = derSequence.getObjectAt(1);
- if (!(derSM2PrivateValue.getDERObject() instanceof DEROctetString)) {
- System.out.println(false);
- }
- return derSM2PrivateValue;
- }
- /**
- * @see 检查私钥version
- * @param derSequence
- * @return
- */
- private static DEREncodable checkInteger_Version(DERSequence derSequence) {
- DEREncodable derIntegerValue = derSequence.getObjectAt(0);
- return derIntegerValue;
- }
- }
java解析密钥格式的更多相关文章
- Java 解析epub格式电子书,helloWorld程序,附带源程序和相关jar包
秀才坤坤出品 一.epub格式电子书 相关材料和源码均在链接中可以下载:http://pan.baidu.com/s/1bnm8YXT 包括 1.JAVA项目工程test_epub,里面包括了jar包 ...
- .NET与JAVA RSA密钥格式转换
一.该篇内容用于记录.net和Java之间,RSA公密钥的转换 using Org.BouncyCastle.Asn1.Pkcs; using Org.BouncyCastle.Asn1.X509; ...
- java 解析json格式数据(转)
2012-07-30 16:43:54| 分类: java | 标签:java json |举报|字号 订阅 有时候我们可能会用到json格式的数据进行数据的传输,那么我们怎么把接收到 ...
- java解析Xml格式的字符串
最近在工作中,需要调别的接口,接口返回的是一个字符串,而且内容是xml格式的,结果在解析json的时候报错,最终修改了接口的返回方式,以Map返回, 才得以接收到这个xml的字符串,然后通过dom4j ...
- Java解析XML格式串(JDOM解析)
import java.io.IOException; import java.io.StringReader; import java.util.List; import org.jdom.Docu ...
- java 解析json格式数据
有时候可能会用到json格式进行数据的传输,那么怎么把接收到的数据解析出来呢? 下面介绍两种解析json数据的方法: 1.通过谷歌的Gson来进行解析: json数据:sTotalString = { ...
- [Java] Java解析XML格式Response后组装成Map
//Get and Parse Response def response = context.expand(‘${TestStepName#Response}’) def xmlParser = n ...
- JAVA,NET RSA密钥格式转换
JAVA和NET RSA密钥格式相互转换(公钥,私钥) 做了一个小项目遇到java和.net非对称加密问题,java的公钥和私钥就直接是一个字符串的形式展示的,但是.net是以xml简单包裹形式展示的 ...
- Java 解析Excel(xls、xlsx两种格式)
Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...
随机推荐
- 1020: 部分A+B
1020: 部分A+B 时间限制: 1 Sec 内存限制: 128 MB提交: 307 解决: 223[提交][状态][讨论版] 题目描述 正整数A的“DA(为1位整数)部分”定义为由A中所有DA ...
- beta-1阶段各组员的贡献分分配
小组名称:nice! 小组成员:李权 于淼 刘芳芳 韩媛媛 宫丽君 项目内容:约跑app 分数分配规则 个人贡献分=基本贡献分*0.2+特殊贡献分*0.3+个人代码贡献量*0.5 其中 基本贡献分,特 ...
- 【RoR win32】新建rails项目找不到script/server的解决办法
现象: D:\>rails new work/demo cd work/demo D:\work\demo>ruby script/server 这时显示出错: ruby: No such ...
- C++笔试题(部分)
1.简述C++11和Boost 2.struct和union与class的区别 3.为什么C++中调用被C编译器编译后的函数要加extern C声明? 4.以下代码哪里不对? #pragma regi ...
- Fury观后感
刚看完,淋雨汽车回来的,电影很精彩.前期略慢热(我还去了躺厕所),军人的黑色幽默,冷酷的军旅生活作为基调.内容我就不ao述了,新兵蛋诺曼的经历是这部电影的为主线(也有人说诺曼是观众的代入点,准确来说他 ...
- NOIP201208同余方程
NOIP201208同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一行,包含两个正整数a, b,用一个空格隔开. 输出格式 输出只有一行,包含 ...
- 关于jQuery的bind()\trigger()\triggerHandler()
1.bind() 事件绑定. 多个事件会链式累加,而不会覆盖. 即 $("div").bind("click",funtion(){alert("te ...
- linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-119723.html linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟 xxxxxxxxxx ...
- 160914、ionic指令简单布局
1) 添加引用类库(ionic样式和ionic js文件) 2) 标题栏,页脚栏,内容区 3) Js引入ionic类库,添加页面操作方法和对象 4) 数据初始化 5) Html页面绑定方法和对象 &l ...
- sersync实现触发式同步
金山的一个居于inotify+rsync进行二次开发实现文件同步的小工具sersync,能够很方便的实现文件触发式同步 Inotify 是基于inode级别的文件系统监控技术,是一种强大的.细粒度的. ...