如何正确解密C#.NET中的RSA数据?

时间:2009-08-29 05:04:09

标签: c# .net key rsa encryption

我的服务器创建一个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搜索结果链接,我已经阅读了所有这些页面但仍然无法使用它。

2 个答案:

答案 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)。 :(