2010-01-10 74 views
13

我試圖使用非對稱加密來加密然後解密文件。我已經使用makecert創建了一個測試證書並將其安裝到我的個人localmachine商店中。將來我將不得不在多臺服務器上安裝此證書,這就是爲什麼我使用「-pe」標誌創建它的原因,即使用可導出的私鑰。證書已成功創建並安裝,我在mmc中看到「您有與此證書對應的私鑰」註釋。帶有可導出私鑰的證書的「Bad key」例外

現在我試圖使用.NET 3.5中的RSACryptoServiceProvider加密數據。它成功了。但是當我試圖解密它時,我得到「壞鑰匙」異常。

如果我創建沒有「-pe」選項的證書,相同的代碼對解密很有效。 下面是代碼:

RSA rsaKey = (RSA)myCertificate.PrivateKey; 
RSACryptoServiceProvider rsaCsp = (RSACryptoServiceProvider)rsaKey; 
byte[] plainText = rsaCsp.Decrypt(encryptedText, true); 

而且我已經試過另一種方法,使用System.Security.Cryptography.Pkcs命名空間:

EnvelopedCms envelope = new EnvelopedCms(); 
envelope.Decode(encryptedText); 
envelope.Decrypt(); 
byte[] plainText = envelope.ContentInfo.Content; 

的結果是一樣的... 誰能幫助?

回答

21

確保您使用的密鑰是使用「-sky Exchange」創建的,如果使用makecert.exe。沒有這個,你只能使用密鑰進行簽名和身份驗證,而不能使用加密/解密,這是你在這裏實現的用例。

+0

謝謝先生,正是我失蹤 – KodeKreachor 2016-03-07 18:17:49

+1

這節省了一天..感謝您的答案和解釋。 – granadaCoder 2016-10-20 23:44:52