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解析密钥格式的更多相关文章

  1. Java 解析epub格式电子书,helloWorld程序,附带源程序和相关jar包

    秀才坤坤出品 一.epub格式电子书 相关材料和源码均在链接中可以下载:http://pan.baidu.com/s/1bnm8YXT 包括 1.JAVA项目工程test_epub,里面包括了jar包 ...

  2. .NET与JAVA RSA密钥格式转换

    一.该篇内容用于记录.net和Java之间,RSA公密钥的转换 using Org.BouncyCastle.Asn1.Pkcs; using Org.BouncyCastle.Asn1.X509; ...

  3. java 解析json格式数据(转)

    2012-07-30 16:43:54|  分类: java |  标签:java  json  |举报|字号 订阅     有时候我们可能会用到json格式的数据进行数据的传输,那么我们怎么把接收到 ...

  4. java解析Xml格式的字符串

    最近在工作中,需要调别的接口,接口返回的是一个字符串,而且内容是xml格式的,结果在解析json的时候报错,最终修改了接口的返回方式,以Map返回, 才得以接收到这个xml的字符串,然后通过dom4j ...

  5. Java解析XML格式串(JDOM解析)

    import java.io.IOException; import java.io.StringReader; import java.util.List; import org.jdom.Docu ...

  6. java 解析json格式数据

    有时候可能会用到json格式进行数据的传输,那么怎么把接收到的数据解析出来呢? 下面介绍两种解析json数据的方法: 1.通过谷歌的Gson来进行解析: json数据:sTotalString = { ...

  7. [Java] Java解析XML格式Response后组装成Map

    //Get and Parse Response def response = context.expand(‘${TestStepName#Response}’) def xmlParser = n ...

  8. JAVA,NET RSA密钥格式转换

    JAVA和NET RSA密钥格式相互转换(公钥,私钥) 做了一个小项目遇到java和.net非对称加密问题,java的公钥和私钥就直接是一个字符串的形式展示的,但是.net是以xml简单包裹形式展示的 ...

  9. Java 解析Excel(xls、xlsx两种格式)

    Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...

随机推荐

  1. [原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Java基础(3):求任意数字的长度的三种方法

    题目:统计任意一个数字的长度 方法一:先把数字转换为字符换,再直接用现成的函数统计长度即可 方法二:用API public class Test { final static int[] sizeTa ...

  3. struts_20_对Action中所有方法、某一个方法进行输入校验(基于XML配置方式实现输入校验)

    第01步:导包 第02步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...

  4. Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security

    Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志.不可 访问的日志: Security 2种方法处理: 一.右键 ...

  5. 关闭VS实时调试器

    到注册表删除以下2个项目就可以了 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger HK ...

  6. JavaScript中Date(日期对象),Math对象--学习笔记

    Date对象 1.什么是Date对象? 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 语法:var Udate=new Date();  注:初始值为当前时间(当前电脑系统 ...

  7. 12---Net基础加强

    使用ShowDialog窗体之间的回传值: using System; using System.Collections.Generic; using System.ComponentModel; u ...

  8. jquery表格仿菜单

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  9. JSP-06-使用JDBC操作数据库

    6.1 使用JDBC查询数据 [链接oracle数据库] 具体操作: 1)  将odbc文件拷贝到项目中 Odbc文件所在目录: oracle安装目录下- product – db_1 – jdbc  ...

  10. 【DP水题】投票问题(二)

    投票问题(一) [试题描述] 欧阳文和欧阳武竞选学联主席,汪梁森负责唱票,共有m+n张,结果欧阳文获胜,已知欧阳文和欧阳武分别获得 m 张票和 n 张票(m>n).现在请你计算在唱票过程中欧阳文 ...