具有大密钥大小加密的RSA

时间:2012-06-24 14:49:49

标签: c# encryption cryptography rsa padding

我正在尝试使用RSACryptoServiceProvider加密256字节的数组,但每次都会出现“Bad Length”的异常。

byte[] seed = new byte[256];
byte[] cypherSeed = new byte[256];

RNGCryptoServiceProvider gen = new RNGCryptoServiceProvider();
gen.GetBytes(seed);

using (RSACryptoServiceProvider rsaCryptoServiceProvider = new RSACryptoServiceProvider(2560))
{
   RSAParameters param = new RSAParameters();
   param.Exponent = this.exponent;
   param.Modulus = this.modulus;

   // set public keys
   rsaCryptoServiceProvider.ImportParameters(param);
   cypherSeed = rsaCryptoServiceProvider.Encrypt(seed, false);
}

我做错了什么?!!

1 个答案:

答案 0 :(得分:2)

你忘了考虑填充。消息大小小于密钥大小,因为RSA需要块的其余部分进行填充。

如果使用PKCS#1 v1.5填充,则需要11个字节的填充,如果使用更强的OAEP填充,则需要2 * hashsize + 2个字节作为填充。

请参阅RSACryptoServiceProvider.Encrypt Method

您还应该考虑使用混合加密,使用RSA加密随机密钥,以及使用该密钥加密实际邮件。