c# - "Bad key"带有可导出私钥的证书异常

标签 c# cryptography certificate pki

我正在尝试使用非对称加密对文件进行加密和解密。我已经使用 makecert 创建了一个测试证书并将其安装到我的个人本地机器商店中。将来我必须在多台服务器上安装此证书,这就是我使用“-pe”标志创建它的原因,即使用可导出的私钥。证书已成功创建和安装,我在 mmc 中看到“您有一个与此证书相对应的私钥”提示。

现在我正尝试在 .NET 3.5 中使用 RSACryptoServiceProvider 加密数据。它成功了。但是当我试图解密它时,出现“Bad key”异常。

如果我创建的证书没有“-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,请确保您使用的 key 是使用“-sky Exchange”创建的。否则,您只能使用 key 进行签名和身份验证,而不能使用您在此处实现的用例进行加密/解密。

关于c# - "Bad key"带有可导出私钥的证书异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2037072/

相关文章:

c# - Visual Studio 2010 设计器抛出实现虚拟方法

ssl - 我的 nodejs 应用程序 SSL 证书没有被考虑在内(IBM CLOUD)

UWP证书

wcf - Windows 上的 X.509 证书入门

c++ - 使用 Crypto++ 将签名从 P1363 转换为 ASN.1/DER 格式?

c# - 无法将外部引用与 C# 控制台应用程序一起使用

C# 和 C++ 进程间同步

c# - 在主窗口之前显示登录窗口

java - HMC SHA1 哈希 - Java 生成与 C# 不同的哈希输出

javascript - CryptoJS 不适用于 IV 和 key ,但它适用于 Ruby