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;
    }

}
时间: 2024-10-09 13:17:39

java解析密钥格式的相关文章

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

一.epub格式电子书 相关材料和源码均在链接中可以下载:http://pan.baidu.com/s/1bnm8YXT 包括 1.JAVA项目工程test_epub,里面包括了jar包和一本epub电子书myBook.epub 2.epub相关jar包 3.电子书myBook.epub epub格式这里就不仔细描述了,这里强调一点,epub格式是压缩格式,只需将后缀改为.zip或.rar,解压即可看到里面的文件内容. 二.JAVA解析.epub格式电子书,具体实现代码如下.写了一个简单hell

.NET与JAVA RSA密钥格式转换

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

java 解析json格式数据(转)

2012-07-30 16:43:54|  分类: java |  标签:java  json  |举报|字号 订阅 有时候我们可能会用到json格式的数据进行数据的传输,那么我们怎么把接收到的数据解析出来呢?   下面有两种方法: 1.通过谷歌的Gson来进行解析: json数据:sTotalString = {"message":"success","result":[{"surveyid":"1",&

java解析vcf格式文件导入导出

package com.yfli.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import j

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

import java.io.IOException; import java.io.StringReader; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.xml.sax.InputSou

java解析Xml格式的字符串

最近在工作中,需要调别的接口,接口返回的是一个字符串,而且内容是xml格式的,结果在解析json的时候报错,最终修改了接口的返回方式,以Map返回, 才得以接收到这个xml的字符串,然后通过dom4j来解析这个xml字符串.xml格式如图: 解析代码如下: /** * dom4j解析Xml * @param xml */ public void getXmlAttribute(String xml) { Document doc = null; try { // 将字符串转为XML doc =

JAVA,NET RSA密钥格式转换

JAVA和NET RSA密钥格式相互转换(公钥,私钥) 不多说直接上代码,需要引用开源类库BouncyCastle.Crypto.dll 也可以在这里下载http://downloads.bouncycastle.org/csharp/bccrypto-net-1.7-bin.zip 以下为转化代码 1 using System; 2 using System.Xml; 3 using Org.BouncyCastle.Asn1.Pkcs; 4 using Org.BouncyCastle.As

Java生成和解析XML格式文件和字符串的实例代码

1.基础知识:Java解析XML一般有四种方法:DOM.SAX.JDOM.DOM4J. 2.使用介绍1).DOM(1)简介 由W3C(org.w3c.dom)提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作.优点就是整个文档都一直在内存中,我们可以随时访问任何节点,并且对树的遍历也是比较熟悉的操作:缺点则是耗内存,并且必须等到所有的文档都读入内存才能进行处理. (2)示例代码: 1.基础知识:Java解析XML一般有四种方法:DOM.SAX.JDOM.DO

解析JSON格式数据

 别想一下造出大海,必须先由小河川开始. 本讲内容:解析JSON格式数据 1)比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量.但缺点在于,它的语义性较差,看起来不如XML直观. 2)解析JSON格式的数据有多种方式,常用的两种是:使用官方提供的JSONObject和谷歌的开源库GSON. 示例一:解析服务器返回的数据 一.JSONObject解析方式 步骤: 1.在服务器中定义一个JSONArray,并将服务器返回的数据传入到JSONArray对象中 2.循环