具有可导出私钥的证书的“坏密钥”例外

时间:2010-01-10 13:08:17

标签: c# cryptography certificate pki

我正在尝试使用非对称加密来加密然后解密文件。我使用makecert创建了一个测试证书,并将其安装到我的个人本地机器商店中。将来我必须在几台服务器上安装这个证书,这就是为什么我用“-pe”标志创建它,也就是说,用可导出的私钥创建它。证书已成功创建和安装,我在mmc中看到“您有一个与此证书对应的私钥”注释。

现在我正在尝试使用.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;

结果是一样的...... 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:24)

如果使用makecert.exe,请确保使用“-sky Exchange”创建了您正在使用的密钥。如果没有这个,你只能使用密钥进行签名和身份验证,而不是加密/解密,这是你在这里实现的用例。