我的服务器创建一个RSACryptoServiceProvider并将其参数导出到变量(RSAKeyInfo)。
然后,公钥被发送到客户端,客户端使用该公钥加密某些内容。
现在,我需要能够在发送回服务器时解密这些数据 - 因此为什么RSA在我的情况下很有用。
但是,当尝试使用先前创建的第一个RSACryptoServiceProvider中的导入参数重新创建RSACryptoServiceProvider时,我收到“错误数据”异常。
......代码可能更清晰。
创建加密:
class Cryptograph
{
public Cryptograph()
{
this.RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true);
}
}
稍后访问以进行解密:
byte[] encrypted = ...;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(this.Cryptograph.RSAKeyInfo);
byte[] decrypted = rsa.Decrypt(encrypted, false);
Console.WriteLine(Utilities.ByteArrayToHexString(decrypted));
我在此行收到“错误数据”异常:
byte[] decrypted = rsa.Decrypt(encrypted, false);
我做错了什么?我怎么能正确地做到这一点? 谢谢:))
P.S。:请不要发送MSDN或明显的Google搜索结果链接,我已经阅读了所有这些页面但仍然无法使用它。
答案 0 :(得分:3)
当使用公钥加密某些内容时,您需要使用私钥进行解密。我没有看到您使用私钥进行解密的位置。
我意识到您已经阅读过此内容,但您可能需要阅读“加密”页面和此“解密”页面,并确保您已按照以下步骤操作: http://msdn.microsoft.com/en-us/library/te15te69.aspx
除非您要加密非常短的邮件,例如密码,否则通常应使用RSA加密来加密对称密钥,这样可以更快地加密/解密更长的邮件。
使用公钥加密的大小与密钥的长度相关联。
答案 1 :(得分:0)
我需要一个不使用填充的加密/解密,默认情况下C#.NET不提供它。 OpenSSL.NET将完成这项工作,但是,我在尝试使用它时遇到困难。 (See this question if you want to help me make it work)。 :(