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. SQL 存储和触发器

    存储过程:就像函数一样的会保存在数据库中-->可编程性 --> 存储过程 创建存储过程:create proc JiaFa--需要的参数@a int,@b intas --存储过程的内容 ...

  2. Excel 生成sql语句

    CONCATENATE 拼接字符串 IF 不能跟 CONCATENATE 连用,所以可以通过建立新列去完成更高的需求 新建一列 cw=CONCATENATE("insert into biC ...

  3. 封装pdo单例模式类

    <?php /** * MyPDO * @author Jason.Wei <jasonwei06@hotmail.com> * @license http://www.sunblo ...

  4. 封装smarty类

    <?php/** * Project:     Smarty: the PHP compiling template engine * File:        Smarty.class.php ...

  5. HDU 4718 The LCIS on the Tree(树链剖分)

    Problem Description For a sequence S1, S2, ... , SN, and a pair of integers (i, j), if 1 <= i < ...

  6. 夺命雷公狗ThinkPHP项目之----企业网站29之网站前台左侧导航的高亮显示

    其实这里就是加多一段jq代码即可: 首先加一个id : 然后在下面加多一段jq代码即可: <script type="text/javascript"> $(docum ...

  7. 使用sudo执行命令的时候提示找不到命令

    事出有因, 源自使用源码编译 nginx , 在 /usr/local/sbin/ 目录下创建了nginx 启动的符号链接 , 执行 sudo nginx 的时候提示找不到命令, 但是使用普通用户身份 ...

  8. 在 wxWidgets 的介绍中看到的一句话

    3. wxwidgets提供的gui是大量使用宏的,这就意味着它是在尽可能的使用目标系统native的gui样式. ——你可以访问wxwidgets网站,看看那些开发的软件的截图,全是系统native ...

  9. [php]使用会话session

    <?php /* cookie - 在客户端上存储少了信息(cookie) session(会话) - 解决cookie大小限制/数量/其他 setcookie() - 设置cookie 在客户 ...

  10. Openstack的vnc界面定制

    先来看一下青云的vnc界面: 在来看一下openstack的自带的vnc界面: 区别于感受 本身原理是一样的,但是vnc上面的html布局不一样而已,但是青云的vnc界面给人的感受是:清晰提示,信息给 ...