RSA加密算法的编程实现论文

RSA加密算法的编程实现论文

ID:37904612

大小:17.26 KB

页数:4页

时间:2019-06-02

RSA加密算法的编程实现论文_第1页
RSA加密算法的编程实现论文_第2页
RSA加密算法的编程实现论文_第3页
RSA加密算法的编程实现论文_第4页
资源描述:

《RSA加密算法的编程实现论文》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、RSA加密算法的编程实现论文RSA算法是在1978年由美国麻省理工学院三位密码学专家RonRivest、AdiShamir和LeonardAdleman发明的。RSA算法是一种典型的公开密钥体制算法,它的发明是对密码学的一个杰出贡献。RSA算法得到了世界上最广泛的应用,并在1992年被ISO国际标准化组织正式纳入国际标准[1][3]。与传统的对称密码算法相比,RSA算法最大贡献是为实现数字签名和数字证实提供了手段,为现代网络安全技术、电子商务、电子政务等打下了坚实的基础。RSA算法实现(1)在产生公开密钥

2、前先要选择两个不同的素数p、q,判断素数的方法很多,本程序判断素数的方法是:设n从3开始,每次增加2(排除偶数),除以≤的所有素数,如不存在被整除的数,则n为素数。(2)有了p、q值,就可以根据ψ(r)的值选择一个公开密钥pk,一般来说密钥长度越长安全性越好,但密钥的值应小于ψ(r)的值,否则不能正确求出私人密钥sk。程序中使用了欧几里德算法求出最大公约数:设有整数a、b,a>b>0,先令b为余数,a为除数,用每次余数为除数,去除以上次的除数,直到余数为0时,则上次的余数就是最大公约数。(3)已知整数a、

3、r,如果a·b≡1modr成立,也就是a·b的乘积被r除所得的余数等于1,用欧几里德扩展算法可以求出b。先令a作为余数,r作为上次除数,根据欧几里德算法,由数学归纳法可以证明出求a的乘逆b的递推公式如下:b-1=0,b=1b=

4、bj

5、其中j为整数,从1开始,qj是rj/aj的整数部分,当rj/aj的余数为1时,则a的乘逆b=

6、bj

7、。(4)加密、解密时,由于P=123456789值巨大,直接计算mamodr的值是很不方便的,使用“平方-乘算法”将极大地提高计算mamodr的速度。先将a转换为二进制数b,令

8、L为b的二进制位数,c=1,“平方-乘算法”伪码如下:FORI=L-1TO0DO{c=c·cmodr;IFbi=1THENc=c·mmodr;}则c就是mamodr的值,其中bi是b的第i位值。RAS算法举例下面我们举一个例子说明RAS加密和解密过程:(1)选素数,如选p=47,q=61。(2)计算公开模数r=p×q=4×61=2867。(3)计算欧拉函数k。(4)利用求最大公约数算法等,选择一个与ψ(r)互质的量k,可以选k=167,并令sk=k=167。(5)根据sk·pk≡1modψ(r),用求乘逆

9、算法求出pk=1223。这样我们就求出RSA算法3个关键值:r=2876,pk=1223,sk=167(6)加密时,假如明文P=123456789,可以将明文分成3组,即P1=123,P2=456,P3=789。用私人密钥sk加密时:C1=P1167modr=1770C2=P2167modr=1321C3=P3167modr=1297所以密文C=177013211297。(7)解密时,如用公开密钥pk解密时,只要计算:P1=C11223modr=123P2=C21223modr=456P3=C31223m

10、odr=789P=123456789这样,就将明文还原出来了。以下程序是java编写的实现RSA加密及解密的算法importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.NoSuchAlgorithmException;importjava.security.SecureRandom;importjava.security.interfaces.RSAPrivateKey;importjava.

11、security.interfaces.RSAPublicKey;importjavax.crypto.Cipher;//RSATest类即为测试类publicclassRSATest{//主函数publicstaticvoidmain(String[]args){try{RSATestencrypt=newRSATest();StringencryptText="encryptText";//输入的明文KeyPairkeyPair=encrypt.generateKey();//调用函数生成密钥对,函数

12、见下RSAPrivateKeyprivateKey=(RSAPrivateKey)keyPair.getPrivate();RSAPublicKeypublicKey=(RSAPublicKey)keyPair.getPublic();byte[]e=encrypt.encrypt(publicKey,encryptText.getBytes());//调用自己编写的encrypt函数实现加密,byte[]de=encrypt

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。