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 ...
随机推荐
- Java基础(4):Scanner输入的典型应用
import java.util.Scanner; /* * 功能:为指定的成绩加分,直到分数大于等于60为止 * 输出加分前的成绩和加分后的成绩,并且统计加分的次数 * 步骤: * 1.定义一个变量 ...
- ant的那些闹挺事
今日发现了一个问题,用ant+hudson去运行脚本代码时,突然ant报错: 即使我在ant的build文件中指定了basedir=“C:/Users/145064/.hudson/jobs/haix ...
- BZOJ 4052: [Cerc2013]Magical GCD
以一个数字开头的子序列的gcd种类不会超过logn种,因此去找相同gcd最长的位置,更新一下答案,复杂度O(nlogn^2) #include<cstdio> #include<al ...
- paper 35 :交叉验证(CrossValidation)方法思想
交叉验证(CrossValidation)方法思想简介 以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(da ...
- LDA-math-MCMC 和 Gibbs Sampling
http://cos.name/2013/01/lda-math-mcmc-and-gibbs-sampling/ 3.1 随机模拟 随机模拟(或者统计模拟)方法有一个很酷的别名是蒙特卡罗方法(Mon ...
- RobotFrameWork接口报文测试-----(一)简单demo的实现
最近几个月的工作任务都是通过使用RF工具来搭建服务器端接口的自动化测试,使用python作为2次开发的语言,也是第一次去做这种项目,经验善浅,还是很有可能会走很多的弯路,为此,我希望自己能把每个阶段的 ...
- Openstack的的nova list命令
nova list用于在shell交互模式下查看当前用户存在的实例数目,但是这里仍然要注意的地方: 没有参数的nova list [root@node-5 newstest-master]# nova ...
- fix org.openqa.selenium.NoSuchWindowException when find element on ie11.
Steps:1.I was able to resolve the issue after adding the site URL under trusted sites of IE. The sam ...
- B2C电子商务网站技术框架
一 设计原则 电子商务平台总体结构的设计应从体系.功能.信息.过程等各个方面保证整个电子商务平台总体目标的实现,以提高市场竞争能力.总体结构的设计应考虑以下设计原则: 快速响应原则:商机稍纵即逝,网站 ...
- android显示当前时间
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日 HH:mm:ss "); Date c ...