RSAencryption,变得糟糕的长度

当调用以下函数时:

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

我现在得到错误:长度不合适。

有一个更小的string的作品,任何想法是什么问题可能是我传递的string是在200个字符以下。

RSAencryption仅仅意味着less量的数据,你可以encryption的数据量取决于你使用的密钥的大小,例如1024位RSA密钥和PKCS#1 V1.5填充,你可以encryption最多117个字节,使用2048个RSA密钥,可以encryption245个字节。

有一个很好的理由,非对称encryption在计算上是昂贵的。 如果你想encryption大量的数据,你应该使用对称encryption。 但是,如果你想要不可否认呢? 那么你做什么是使用两个。 您可以创build对称密钥并使用非对称encryption进行交换,然后安全地交换对称密钥来encryption大量数据。 这是封面下面的SSL和WS-Secure。

对于将来有关RSA不良长度例外的search…

您可以使用以下命令计算可以使用特定密钥大小encryption的最大字节数:

((KeySize-384)/ 8)+37

但是,如果最佳非对称encryption填充(OAEP)参数是真实的,就像它在原始文章中那样,可以使用以下来计算最大字节:

((KeySize-384)/ 8)+7

合法的密钥大小是384到16384,跳过大小为8。

正如上面所解释的那样,“坏长度”types例外的解决scheme是混合使用对称和非对称encryption,以便您正在encryption的文本的大小不受密钥大小的限制。 您基本上使用RSAencryption来对随机密钥进行非对称encryption。

对于encryption:

  1. 生成对称encryption技术所需长度的随机密钥,如AES或Rijndael。

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

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

对于解密:

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

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

对于一个演示,你可能希望看看下面这个在C#中的例子:

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