RSA是常用的非对称加密算法。近来有学生在项目中使用System.Security类库中的RSA加密算法时,出现了“不正确的长度”,这实际上是因为待加密的数据超长所致。.net
Framework中提供的RSA算法规定,每次加密的字节数,不能超过密钥的长度值减去11,而每次加密得到的密文长度,却恰恰是密钥的长度。所以,如果要加密较长的数据,可以采用数据截取的方法,分段加密。或者增加自定义分块算法,进行加密。当然,你也可以加长密钥的长度,呵呵。下面是分段加解密代码片段,希望对程序媛们有帮助
public override byte[] Encrypt(byte[] sourceBytes)
{
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = KeyContainerName;
RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams);
int keySize = RSAalg.KeySize / 8;
int bufferSize = keySize - 11;
byte[] buffer = new byte[bufferSize];
MemoryStream msInput = new MemoryStream(sourceBytes);
MemoryStream msOutput = new MemoryStream();
int readLen = m