2

我的服务器创建一个 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);

我究竟做错了什么?我怎样才能正确地做到这一点?谢谢 :)

PS:请不要发送 MSDN 或明显的 Google 结果链接,我已经阅读了所有这些页面,但仍然无法正常工作。

4

2 回答 2

3

当使用公钥加密某些内容时,您需要使用私钥进行解密。我看不到您在哪里使用私钥进行解密。

我知道您已经阅读过此内容,但您可能需要阅读 Encrypt 页面和此 Decrypt 页面,并确保您遵循以下步骤:http: //msdn.microsoft.com/en-us/library/te15te69。 aspx

除非您要加密非常短的消息,例如密码,否则通常应使用 RSA 加密来加密对称密钥,这样可以更快地加密/解密较长的消息。

您可以使用公钥加密的内容的大小与密钥的长度有关。

于 2009-08-29T05:14:29.527 回答
0

我需要一个不使用填充的加密/解密,而 C#.NET 默认不提供它。OpenSSL.NET 可以完成这项工作,但是,我在尝试使用它时遇到了困难。(如果您想帮助我使其工作,请参阅此问题)。:(

于 2009-09-08T22:07:13.087 回答