您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 电子商务 > 关于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();
本文标题:关于RSA加密算法的长度限制问题
链接地址:https://www.777doc.com/doc-2665629 .html