我正在尝试使用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);
}
我做错了什么?!!
答案 0 :(得分:2)
你忘了考虑填充。消息大小小于密钥大小,因为RSA需要块的其余部分进行填充。
如果使用PKCS#1 v1.5填充,则需要11个字节的填充,如果使用更强的OAEP填充,则需要2 * hashsize + 2个字节作为填充。
请参阅RSACryptoServiceProvider.Encrypt Method
您还应该考虑使用混合加密,使用RSA加密随机密钥,以及使用该密钥加密实际邮件。