2014-04-23 65 views
1

正在讀取PKCS#15文件(asn1)。最終我得到了一個pkcs#7結構,其中包含一個PasswordRecipientInfo(PBKDF2)。使用PasswordRecipientInfo從ASN1讀取PKCS#7

我可以將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); 

回答

1

似乎一些包裝代碼從DER-數據丟失之上:

  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數據導入的EnvelopedData。