【问题标题】:How do I decrypt RSA data in C#.NET appropriately?如何正确解密 C#.NET 中的 RSA 数据?
【发布时间】:2010-11-23 22:40:39
【问题描述】:

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

【问题讨论】:

  • 客户端也是.net客户端吗?他们使用相同版本的 .net 吗?

标签: c# .net key rsa encryption


【解决方案1】:

我需要一个不使用填充的加密/解密,而 C#.NET 默认不提供它。 OpenSSL.NET 可以完成这项工作,但是,我在尝试使用它时遇到了困难。 (See this question if you want to help me make it work)。 :(

【讨论】:

    【解决方案2】:

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

    我知道您已经阅读了此内容,但您可能想阅读加密页面和解密页面,并确保您遵循以下步骤: http://msdn.microsoft.com/en-us/library/te15te69.aspx

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

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

    【讨论】:

    • 完全同意消息长度。 RSA 通常比对称加密/解密慢得多,因此通常仅用于加密密码或对称密钥
    • 让我重新组织一下我的问题:我有一个 128 字节的字节数组,其中包含用公钥加密的数据。我有一个包含私钥的 128 个字节的字节数组。如何解密加密的字节数组?谢谢:)
    • 私钥是怎么变成字节数组的?您的 128 位密钥应该是对称密钥。那么,是用私钥加密的吗?如果是这样,那么您使用公钥解密它,但是您需要从解密的密钥重新创建对称密钥。哪种 API 或语言将密钥转换为字节表示?
    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2011-02-28
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多