2012-03-06 47 views
1

我使用的CMSAuthenticatedData從充氣城堡庫,版本146.我可以創建它正確,通過檢查ASN.1轉儲驗證,但我似乎無法到檢索內容。檢索充氣城堡的CMSAuthenticatedData【JAVA]封裝內容

的認證的數據對象與一個發生器產生,這樣的:

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

cmsData然後用.getEncoded(),向服務器發送串行化,並與字節[]構造反序列化。從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字節數組?

回答

0

的研究星期後,我發現使用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() 

我當然希望這不是最簡單的方法,但它是唯一一個我發現。