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

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

现在我尝试使用.NET 3.5中的RSACryptoServiceProvider加密数据。 它成功了。 但是当我试图解密它时,我得到“坏键”exception。

如果我创建没有“-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; 

结果是一样的……任何人都可以帮忙吗?

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