2014-03-04 164 views
0

我正在做驗證數字簽名。當我試圖用SignedCms.Decode() ,就引起System.Security.Cryptography.CryptographicException{"ASN1 bad tag value met.\r\n"}SignedCms.Decode()會導致「遇到ASN1錯誤標記值」。 r n「

我生成Java簽名數據,並嘗試以驗證它在C#中。

這是用於驗證簽名的C#代碼。

//base64 signature data 
string encodedMessage_b64 = "ahXwmjFNUVxxxxxx=="; 
byte[] encodedMessage = Convert.FromBase64String(encodedMessage_b64); 
SignedCms signedCms = new SignedCms(); 
//throw exception 
signedCms.Decode(encodedMessage); 

這裏是用於生成簽名的Java代碼。

Signature rsaSig = Signature.getInstance("SHA1withRSA"); 
//privateKey from keytore 
rsaSig.initSign(priKey); 
rsaSig.update(data.getBytes()); 
//org.apache.commons.codec.binary.Base64; 
String signedData = Base64.encodeBase64String(rsaSig.sign()); 

問題是carriage returnline feed,我不知道他們來自哪裏。

任何意見將不勝感激:)

回答

0

CR和LF是沒有問題;異常消息中的\ r \ n只是異常消息的一部分。真正的症狀是「ASN1壞標籤」。這是因爲dotnet SignedCMS用於加密消息語法(CMS)數據,與您創建的簡單RSA簽名相比,這種方式不同並且複雜得多。有關詳細信息,請參閱RFC 3369等。

如果你真的想使用一個接近原始的簽名(包括PKCS#1填充,幾乎包括Java在內的每個人都可以,但不是algid,實體/密鑰標識,附加數據,證書,類型標識等)你需要做一些不同的事情來在Csharp中接收它。我無法幫助那部分。

如果要在Java中生成CMS SignedData,請參見Sign data using PKCS #7 in JAVA(BouncyCastle)或https://security.stackexchange.com/questions/13910/pkcs7-encoding-in-java-without-external-libs-like-bouncycastle-etc(sun擴展)。

如果您沒有與Java結合,openssl(在高度可移植的C中)在CMS/PKCS#7上也做得很好。

+0

感謝您的幫助。你是對的。我正在努力使用PKCS#7。 :) – Ashkandi

相關問題