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学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用

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

  2. C#: log4net

    log4net.dll是apache发布的用来记录log的dll文件 这里举个例子相信大家就知道怎么用了,新建一个console项目,添加log4net.dll后再添加应用程序配置文件 <?xm ...

  3. 是否可以继承String类?

    是否可以继承String类? String类是final类故不可以继承

  4. JS 实现中英文翻译

    缺点就是还是会闪出中文,但是效果还行. var langPackage = { "主题":"Title", "下一页":"Next ...

  5. demo05

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  6. Oracle中游标返回多条数据的情况

    DECLARE -- 定义类型. TYPE test_type IS TABLE OF test_main%ROWTYPE; test_data test_type; -- 定义游标. CURSOR ...

  7. Mysql索引总结(二)

    在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: ) NOT NULL ); 在查找username="admin"的记录 SELECT * ...

  8. 【ruby】快速安装gems的方法

    在使用gem install ...的时候增加参数: --no-ri 可以不安装ri部分 --no-rdoc 可以不安装rdoc部分

  9. C语言初学者代码中的常见错误与瑕疵(15)

    见:http://www.cpfn.org/bbs/viewtopic.php?f=85&t=5946&sid=0252f08a6d697fbf5a684ec5f6faf1f2 相关链 ...

  10. 1行代码,删除svn文件夹

    引用:http://www.cnblogs.com/Alexander-Lee/archive/2010/02/23/1671905.html linux操作系统: find -name .svn | ...