关于RSA加密算法的长度限制问题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

关于RSA加密算法的长度限制问题RSA是常用的非对称加密算法。近来有学生在项目中使用System.Security类库中的RSA加密算法时,出现了“不正确的长度”,这实际上是因为待加密的数据超长所致。.netFramework中提供的RSA算法规定,每次加密的字节数,不能超过密钥的长度值减去11,而每次加密得到的密文长度,却恰恰是密钥的长度。所以,如果要加密较长的数据,可以采用数据截取的方法,分段加密,实现如下:RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();byte[]data=........;//要加密的数据stringpublicKey=....;//获取公钥rsa.FromXmlString(publicKey);intkeySize=rsa.KeySize/8;intbufferSize=keySize-11;byte[]buffer=newbyte[bufferSize];MemoryStreammsInput=newMemoryStream(data);MemoryStreammsOuput=newMemoryStream();intreadLen=msInput.Read(buffer,0,bufferSize);while(readLen0){byte[]dataToEnc=newbyte[readLen];Array.Copy(buffer,0,dataToEnc,0,readLen);byte[]encData=rsa.Encrypt(dataToEnc,false);msOutput.Write(encData,0,encData.Length);readLen=msInput.Read(buffer,0,bufferSize);}msInput.Close();byte[]result=msOutput.ToArray();//得到加密结果msOutput.Close();rsa.Clear();解密时肯定也要使用分段解密,算法如下:RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();byte[]key=.....;//加载私钥stringprivateKey=Encoding.ASCII.GetString(key);byte[]dataEnc=...;//加载密文rsa.FromXmlString(privateKey);intkeySize=rsa.KeySize/8;byte[]buffer=newbyte[keySize];MemoryStreammsInput=newMemoryStream(dataEnc);MemoryStreammsOuput=newMemoryStream();intreadLen=msInput.Read(buffer,0,keySize);while(readLen0){byte[]dataToDec=newbyte[readLen];Array.Copy(buffer,0,dataToDec,0,readLen);byte[]decData=rsa.Decrypt(dataToDec,false);msOutput.Write(decData,0,decData.Length);readLen=msInput.Read(buffer,0,keySize);}msInput.Close();byte[]result=msOutput.ToArray();//得到解密结果msOutput.Close();rsa.Clear();

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功