首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bouncycastle解析ASN1数据

如何使用bouncycastle解析ASN1数据
EN

Stack Overflow用户
提问于 2013-12-04 19:19:51
回答 3查看 14.5K关注 0票数 5

我有一个字节数组,它的形式是asn1,format..now,我想解析这个数据,得到所需的,information..Here是他们为c++..now写的代码,我想在java.could中做同样的事情。

ASN1 asn1(in);

代码语言:javascript
复制
 int startPos = in.tellg();
 asn1.enterObject(asn1.getTag());
 int endPos = asn1.getCurrentLength() + in.tellg();

 ubytearray acctId, valData;

 while (in.tellg() < endPos) {
     asn1.enterObject(0x30); //0x30 TAG_SEQ

     // read the name
     ubytearray nameData = asn1.getContent(ASN1_TAG_UTF8_STRING);
     ubytearray octstr =  asn1.getContent(ASN1_TAG_OCTET_STRING);

字节数组证书(Octstr);asn2.enterObject(0x30);ustring urlstr(asn2.getContent(ASN1_TAG_UTF8_STRING));ustring nameStr(asn2.getContent(ASN1_TAG_UTF8_STRING));asn2.enterObject(0x30);ubytearray ASN1 asn2= asn2.getContent(ASN1_TAG_OCTET_STRING);

代码语言:javascript
复制
     if ((urlstr.length() > 0)  && (nameStr.length() > 0) && (certs.length() > 0)) {
         printf("url %s\n", urlstr.c_str());
         printf("name %s\n", nameStr.c_str());
         printf("certs len:%d\n", certs.length());  

}}

EN

回答 3

Stack Overflow用户

发布于 2013-12-07 17:24:04

您应该能够使用org.bouncycastle.asn1中的类,从ASN1InputStream开始,从InputStream或byte[]读取ASN.1结构。要理解示例代码有点困难,但下面这样的代码可能会帮助您入门:

代码语言:javascript
复制
    byte[] data = null; // obviously need to supply real data here
    ASN1InputStream input = new ASN1InputStream(data);

    ASN1Primitive p;
    while ((p = input.readObject()) != null) {
        ASN1Sequence asn1 = ASN1Sequence.getInstance(p);

        DERUTF8String nameData = DERUTF8String.getInstance(asn1.getObjectAt(0));
        ASN1OctetString octstr = ASN1OctetString.getInstance(asn1.getObjectAt(1));

        ASN1Sequence asn2 = ASN1Sequence.getInstance(ASN1Primitive.fromByteArray(octstr.getOctets()));

        // ... and so on
    }

如果您发现数据的结构很难理解,也许org.bouncycastle.asn1.util.ASN1Dump类会有所帮助:

代码语言:javascript
复制
    byte[] data = null; // obviously need to supply real data here
    ASN1InputStream input = new ASN1InputStream(data);

    ASN1Primitive p;
    while ((p = input.readObject()) != null) {
        System.out.println(ASN1Dump.dumpAsString(p));
    }
票数 14
EN

Stack Overflow用户

发布于 2020-10-13 23:23:08

对于PEM编码的签名,您可以使用

代码语言:javascript
复制
String signaturePem = "-----BEGIN PKCS7-----\n...";
PEMParser parser = new PEMParser(new StringReader(signaturePem));
ContentInfo contentInfo = (ContentInfo) parser.readObject();
CMSSignedData signedData = new CMSSignedData(contentInfo);
...
票数 0
EN

Stack Overflow用户

发布于 2013-12-04 19:28:56

您可以像这样解码byteArray

代码语言:javascript
复制
String base64String = "Here is your byte array data";
byte[] data  = Base64.decode(base64String, Base64.DEFAULT);
String result= new String(data , "UTF-8");
票数 -7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20373958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档