[英]CryptographicException: Unknown Error '80007005'. when calling RSACryptoServiceProvider.Decrypt() in .Net Compact Framework
我正在尝试使用RSACryptoServiceProvider
进行加密/解密。 加密可以正常工作,但是Decrypt
方法会在消息中引发异常:
未知错误“ 80007005”。
这是代码:
Byte[] plainData = encoding.GetBytes(plainText);
Byte[] encryptedData;
RSAParameters rsap1;
Byte[] decryptedData;
using (RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider())
{
encryptedData = rsa1.Encrypt(plainData, false);
rsap1 = rsa1.ExportParameters(false);
}
using (RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider())
{
rsa2.ImportParameters(rsap1);
decryptedData = rsa2.Decrypt(encryptedData, false);
}
decryptedText = encoding.GetString(decryptedData, 0, decryptedData.Length);
有人知道解决方法吗?
谢谢!
修正了代码! 我想我根本不需要指定容器...
Byte[] plainData = encoding.GetBytes(plainText);
Byte[] encryptedData;
Byte[] decryptedData;
using (RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider())
{
RSAParameters rsap1 = rsa1.ExportParameters(false);
using (RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider())
{
rsa2.ImportParameters(rsap1);
encryptedData = rsa2.Encrypt(plainData, false);
}
decryptedData = rsa1.Decrypt(encryptedData, false);
}
decryptedText = encoding.GetString(decryptedData, 0, decryptedData.Length);
rsap1 = rsa1.ExportParameters(false);
通过将false传递给此方法,您选择不导出私钥。 没有私钥,将很难解密数据。 尝试将true传递给export方法。
使用RSA时,您需要了解密钥管理的基础知识。 您没有指定加密期间要使用的密钥容器。 您希望使用什么钥匙? 默认用户密钥? 机器钥匙? 您知道默认的用户密钥和机器密钥是什么吗? 更不用说为什么您要使用RSA加密任何内容的明显问题了? RSA加密仅用于加密会话密钥,并且有专用的密钥交换协议来处理此问题(即像TLS这样的面向流或像S / MIME这样的文档)。 您应该使用这些现成的协议之一,而不要推出自己的加密方案。 您将保证密钥管理的安全。
当您尝试解密时,解密器是否拥有与加密期间使用的公钥相对应的私钥?
看到:
请注意,这些只是MSDN中的简单代码示例,如果不对加密技术(尤其是密钥管理)有深入的了解,则任何人都不应使用它们。
我建议您考虑使用像SslStream这样的高级类来加密数据交换。 对于文档存储加密方案,最好使用OS功能或依赖ProtectedData类。 同样,除非您真的知道自己在做什么,否则不要进行自己的加密(在这种情况下,您将不会在这里提出问题)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.