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. list和map的区别

    list和map的区别 list-->list是对象集合,允许对象重复 map-->map是键值对的集合,不允许key重复

  2. HDU 4822 Tri-war(LCA树上倍增)(2013 Asia Regional Changchun)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4822 Problem Description Three countries, Red, Yellow ...

  3. Spring 中 Xml配置文件属性的说明

    Xml配置文件属性的说明: <bean id="TheAction" ⑴ class="net.xiaxin.spring.qs.UpperAction" ...

  4. Creating Directives that Communicate

    <my-tabs> <my-pane title="Hello"> <h4>Hello</h4> <p>Lorem ip ...

  5. 夺命雷公狗ThinkPHP项目之----企业网站11之栏目的删除完成

    我们删除要在分类模型中添加一个_before_delete的钩子函数,而且在删除一个分类时候,如果这个分类有子分类就不允许删除 model层代码如下所示: <?php namespace Adm ...

  6. linux中关于php和nginx用户权限的一些东西

    当我们启动nginx之后, 会有两个nginx进程(一个是master, 一个是worker). master的用户身份是root, worker用户的身份是nobody. 在nginx中可以修改 w ...

  7. java web sql注入测试(3)---现象分析

    那为什么出现以上问题呢?这是程序代码层控制不当导致的.如果web前端对输入数据控制严格,会对数据库进行操作的字符串,在客户端做敏感字符转义处理,或者在操作数据库的dao层,使用动态参数的sql,不使用 ...

  8. 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解

    在上节博客中曾提到过类的继承,这篇文章主要是介绍类的继承.构造函数以及静态代码块的执行顺序. 首先接着分析在黑马基础测试中的一个关于继承的题目,题目描述如下: 声明类Person,包含2个成员变量:n ...

  9. 用javascript在客户端删除某一个cookie键值对

    下面这个方法展示如何在客户端浏览器上用javascript删除某一个cookie键值对. //用javascript删除某一个cookie的方法,该方法传入要删除cookie的名称 function ...

  10. viewpage图片轮播

    package com.exmple.viewpage2; import java.util.ArrayList;import java.util.List;import java.util.Time ...