“Bad key” exception for certificates with exportable private key
我正在尝试使用非对称加密来加密和解密文件。我使用makecert创建了一个测试证书,并将其安装到我的个人localmachine存储中。将来,我将不得不在多个服务器上安装此证书,这就是为什么我使用"-pe"标志(即可导出的私钥)创建它的原因。证书已成功创建和安装,我在MMC中看到"您有一个与此证书对应的私钥"说明。
现在,我尝试用.NET 3.5中的rsacryptoseServiceProvider加密数据。它成功了。但是当我试图解密它时,我得到了"坏密钥"异常。
如果我在没有"-pe"选项的情况下创建证书,那么同样的代码在解密时也能很好地工作。代码如下:
1 2 3 | RSA rsaKey = (RSA)myCertificate.PrivateKey; RSACryptoServiceProvider rsaCsp = (RSACryptoServiceProvider)rsaKey; byte[] plainText = rsaCsp.Decrypt(encryptedText, true); |
我还尝试了另一种方法,使用system.security.cryptography.pkcs命名空间:
1 2 3 4 | EnvelopedCms envelope = new EnvelopedCms(); envelope.Decode(encryptedText); envelope.Decrypt(); byte[] plainText = envelope.ContentInfo.Content; |
结果是一样的…有人能帮忙吗?
如果使用makecert.exe,请确保使用"-sky exchange"创建了正在使用的密钥。没有这个,您只能使用密钥进行签名和身份验证,而不能使用加密/解密,这是您在这里实现的用例。