【问题标题】:Retrieve encapsulated content from Bouncy Castle's CMSAuthenticatedData [Java]从 Bouncy Castle 的 CMSAuthenticatedData [Java] 中检索封装的内容
【发布时间】:2012-03-06 20:03:30
【问题描述】:

我正在使用 Bouncy Castle 库版本 146 中的 CMSAuthenticatedData。我可以正确创建它,通过检查 ASN.1 转储进行验证,但我似乎无法检索内容。

经过身份验证的数据对象是使用生成器创建的,如下所示:

CMSAuthenticatedDataGenerator generator = new CMSAuthenticatedDataGenerator();
CMSProcessableByteArray myContent = new CMSProcessableByteArray(myBytes);
CMSAuthenticatedData cmsData = generator.generate(myContent, myMacCalculator);

cmsData 然后使用 .getEncoded() 序列化,发送到服务器,并使用 byte[] 构造函数进行反序列化。从RFC,我看到 myBytes 应该在 AuthenticatedData 对象内的 encapContentInfo 字段中,但我无法得到它。到目前为止,这是我尝试过的:

// The original byte array I want to retrieve is 633 bytes long.

cmsData.getEncoded();
// returns ASN.1 for authData OID and AuthenticatedData object. Size: 724

cmsData.getContentInfo();
// Same as cmsData.getEncoded(). Size: 724

cmsData.getContentInfo().getContent().getDERObject().getEncoded();
// returns ASN.1 for AuthenticatedData object. Size: 703

那么,这是否可能,或者我应该推出自己的实现,解析 ASN.1 字节数组?

【问题讨论】:

    标签: java bouncycastle


    【解决方案1】:

    经过数周的研究,我找到了使用org.bouncycastle.asn1.cms.AuthenticatedData的解决方案:

    CMSAuthenticatedData cmsData; // <- this is the object created.
    byte[] cmsBytes = cmsData.getContentInfo().getContent().getDERObject().getEncoded();
    ASN1Sequence byteSeq = (ASN1Sequence) ASN1Object.fromByteArray(rawAuthenticatedDataBytes)
    AuthenticatedData authData = new AuthenticatedData(byteSeq);
    byte[] contentBytes = authData.getEncapsulatedContentInfo().getContent().getDERObject().getEncoded()
    

    我当然希望这不是最简单的方法,但这是我找到的唯一方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多