当调用以下函数时:

byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true);

我现在收到错误:长度不好。

对于较小的字符串,它可以工作,任何想法可能是我传递的字符串的问题都在 200 个字符以下。

有帮助吗?

解决方案

RSA加密仅意味着少量数据,则可以进行加密的数据量依赖于要使用的密钥,例如大小为1024个RSA密钥,和PKCS#1 V1.5填充,最多可以进行加密117个字节,2048 RSA密钥,可以加密245个字节。

有一个很好的原因,非对称加密是计算昂贵的。如果要加密大量数据,你应该使用对称加密。但是,如果你想要的不可抵赖性?那么什么,那么你要做的就是同时使用。您创建一个对称密钥并使用非对称加密交换,然后安全地交换对称密钥加密您的大量数据。这是SSL和WS-Secure的盖子下面使用。

其他提示

有关RSA坏长度例外未来的搜索...

可以计算其可与下面的一个特定的键尺寸被加密的字节的最大数量:

((KeySize - 384) / 8) + 37

然而,如果最佳非对称加密填充(OAEP)参数为真,因为它是在原来的职位,以下可用于计算最大字节数:

((KeySize - 384) / 8) + 7

在法律密钥大小是384通16384为8的跳跃大小。

如上所述,“错误长度”类型异常的解决方案是混合使用对称和非对称加密,以便您要加密的文本的大小不受密钥大小的限制。您基本上使用 RSA 加密来非对称加密随机数 钥匙 .

对于加密:

  1. 生成对称加密技术(例如 AES 或 Rijndael)所需长度的随机密钥。

  2. 使用步骤 1 中生成的随机密钥,使用 AES/Rijndael 对称加密您的文本/数据。

  3. 使用 RSA 对步骤 1 中生成的随机密钥进行非对称加密。

解密:

  1. 首先使用您的 RSA 私钥解密 AES/Rijndael 生成的随机密钥。

  2. 然后使用 RSA 解密的随机密钥解密原始文本/数据

为了进行演示,您可能希望查看以下 C# 示例:

http://www.technical-recipes.com/2013/using-rsa-to-encrypt-large-data-files-in-c/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top