【问题标题】:Read PKCS#7 from ASN1 with PasswordRecipientInfo使用 PasswordRecipientInfo 从 ASN1 读取 PKCS#7
【发布时间】:2014-04-23 18:44:24
【问题描述】:

我正在读取一个 PKCS#15 文件 (asn1)。最终我得到了一个 pkcs#7 结构,其中包含一个 PasswordRecipientInfo (PBKDF2)。

我可以将 asn1 结构读入 Bouncy Castle EnvelopedData。我可以手动读取所有加密参数,并且我知道解密数据的密码。

但是如何将 EnvelopedData 转换为 CmsEnvelopedData 之类的东西(具有更多功能)。如果我将 asn1 数据提供给 CmsEnvelopedData 它会因数据格式错误等而失败。

我也使用 Rebex,但它似乎不支持 PasswordRecipientInfo 结构(尽管它们确实实现了 PBKDF2 密钥生成)。

我确实手动完成了所有解密,但最终没有得到有用的数据,所以我可能在所有 3Des 解密时都犯了错误。

这是示例 ASN1 流:

    0:d=0  hl=4 l= 823 cons: SEQUENCE          
    4:d=1  hl=4 l= 815 cons: cont [ 2 ]        
    8:d=2  hl=2 l=   1 prim: INTEGER           :02
   11:d=2  hl=2 l= 105 cons: SET               
   13:d=3  hl=2 l= 103 cons: cont [ 3 ]        
   15:d=4  hl=2 l=   1 prim: INTEGER           :00
   18:d=4  hl=2 l=  27 cons: cont [ 0 ]        
   20:d=5  hl=2 l=   9 prim: OBJECT            :PBKDF2
   31:d=5  hl=2 l=  14 cons: SEQUENCE          
   33:d=6  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:91923125EC5C328F
   43:d=6  hl=2 l=   2 prim: INTEGER           :07D0
   47:d=4  hl=2 l=  35 cons: SEQUENCE          
   49:d=5  hl=2 l=  11 prim: OBJECT            :1.2.840.113549.1.9.16.3.9
   62:d=5  hl=2 l=  20 cons: SEQUENCE          
   64:d=6  hl=2 l=   8 prim: OBJECT            :des-ede3-cbc
   74:d=6  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:9F040621A5AF002B
   84:d=4  hl=2 l=  32 prim: OCTET STRING      [HEX DUMP]:52237B22E48C5D579DBA6FD457DFC47C7C9F244306F3856CE98826C5657E9B60
  118:d=2  hl=4 l= 701 cons: SEQUENCE          
  122:d=3  hl=2 l=   9 prim: OBJECT            :pkcs7-data
  133:d=3  hl=2 l=  20 cons: SEQUENCE          
  135:d=4  hl=2 l=   8 prim: OBJECT            :des-ede3-cbc
  145:d=4  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:4620AEA54621405F
  155:d=3  hl=4 l= 664 prim: cont [ 0 ]        
  823:d=1  hl=2 l=   2 prim: INTEGER           :0100

还有一些代码:

 var ed = EnvelopedData.GetInstance(encodedkey);

【问题讨论】:

    标签: c# bouncycastle pkcs#7


    【解决方案1】:

    上面的 der-data 中似乎缺少一些包装代码:

                var bs = new MemoryStream();
                var constructeddata = new DerSequenceGenerator(bs);
                constructeddata.AddObject(new DerObjectIdentifier("1.2.840.1.113549.1.7.3"));
                constructeddata.AddObject(new DerTaggedObject(true, 0, ed));
                //constructeddata.AddObject(ed.ToAsn1Object());
                constructeddata.Close();
    
                var derdata = bs.ToArray();
    
    
                var cms = new CmsEnvelopedData(derdata);
    

    所以我要做的是为数据添加顶层。 ed 是我能够从 der-data 导入的 EnvelopedData。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2011-04-19
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 2019-01-27
      相关资源
      最近更新 更多