2010-01-10 93 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