C# &引用;“坏键”;具有可导出私钥的证书的例外情况

C# &引用;“坏键”;具有可导出私钥的证书的例外情况,c#,cryptography,certificate,pki,C#,Cryptography,Certificate,Pki,我正在尝试使用非对称加密对文件进行加密和解密。我已经使用makecert创建了一个测试证书,并将其安装到我的个人localmachine存储中。将来我必须在几个服务器上安装这个证书,这就是为什么我用“-pe”标志创建它,也就是说,用可导出的私钥。证书已成功创建和安装,我在mmc中看到“您拥有与此证书对应的私钥”说明 现在我正在尝试使用.NET3.5中的RSACryptServiceProvider加密数据。它成功了。但当我试图解密它时,我得到了“坏密钥”异常 如果我创建的证书没有“-pe”选项,

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

现在我正在尝试使用.NET3.5中的RSACryptServiceProvider加密数据。它成功了。但当我试图解密它时,我得到了“坏密钥”异常

如果我创建的证书没有“-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”创建的。如果没有这一点,您只能使用密钥进行签名和身份验证,而不能使用加密/解密,这是您在这里实现的用例。

谢谢您,先生,这正是我所遗漏的。这挽救了这一天。。谢谢你的回答和解释。