论文部分内容阅读
[摘要] 电子商务的发展使得网络信息的安全传输问题显得尤为重要。文章对电子商务中经常会用到的RSA加密算法原理进行了描述并用Java语言编程实现了RSA算法。该程序由五个模块组成,它们是主函数模块、转换字符串为大整数模块、转换大整数为ASCII字符串模块、加密模块和解密模块。
[关键词] RSA 公钥 私钥 加密 解密 Java语言
随着信息技术的发展,特别是电子商务的发展,网络信息的安全传输逐渐成为人们最为关心的事情。RSA加密算法是目前应用最广泛的公钥加密算法。特别适用于通过internet传送的数据,常用于数字签名和密钥交换。本文用Java语言实现了RSA算法。
一、RSA算法描述
密钥对的产生。选择两个大素数p 和q 。计算:n=p*q,然后随机选择加密密钥e,要求e和(p-1)*(q-1)互质。最后,利用Euclid算法计算解密密钥d,满足e*d=1mod((p-1)*(q-1)),其中n和d也要互质。{e,n}是公钥,{d,n}是私钥。加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,…,mi,块长s,其中2∧s<=n,s尽可能的大。对应的密文是:ci=(mi∧e)mod n,解密时作如下计算:mi=(ci∧d)mod n
二、程序实现的主要思想
Java中的BigInteger类提供了实施RSA公钥加密系统所必需的全部可能性。本程序根据生成公钥/私钥对来论证RSA。用户输入一串字符串,用公钥加密字符串,用私钥解密字符串,所有的结果被输出。
三、主要算法流程和框图
1.主要算法流程
随机生成p,q→计算N=p*q→计算p1=p-1,q1=q-1→计算p1q1=p1*q1→随机生成e,e须满足gcd(p1q1,e)=1,1 2.主要框圖
程序算法流程图
四、主要模块说明
1.主函数模块
生成公钥/私钥对,调用加密模块对明文进行加密,然后调用解密模块对密文进行解密。
2.转换字符串为大整数模块
转换字符串为大整数。字符串应该仅由ASCII字符组成。简单地将ASCII代码连接而形成整数。
3.转换大整数为ASCII字符串模块
转换大整数为ASCII字符串。整数里的各个字节简单地被转换成对应的ASCII代码。
4.加密模块
用公钥(N,e),应用RSA加密算法对字符串进行加密。字符串被分成多个数据块,每一个数据块被转换为一个整数,然后这个整数x用算式:x∧e (mod N)被编码(加密)。
5.解密模块
用私钥(N,d),应用RSA解密算法对字符串进行解密。首先用算式:x∧d(mod N)解码整数列里的每一个整数x,然后每个被解码的整数被转换为一个字符串,且所有的字符串被连接成一个单一的字符串。
五、程序使用说明
在Textpad中,输入源程序后,保存源程序(假若源程序文件名为RSA.java),编译源程序,编译成功后,在原RSA.java程序所在的文件夹中生成RSA.class文件,然后运行该程序,如果一切运行正常,则输出正确结果。
六、结束语
本文用Java语言实现了RSA算法。由于用到java中的BigInteger类,因此运行效率较高。如果用C语言编程,一个运行结果大约需要2个多小时才能算出,而用java中的BigInteger类编程则几秒钟结果就出来了,因此,对RSA算法用Java编程显然比用C语言编程的效率要高得多。
参考文献:
[1][美]William Stallings著.密码编码学与网络安全:原理与实践(第二版)[M].杨明等译.北京:电子工业出版社,2001
[2]唐大仕编著:Java程序设计[M].北京:北方交通大学出版社,清华大学出版社,2003
[3]田文春韦岗:RSA算法的Java实现[J].计算机工程与应用. 2001,(24):43~44,62
[4]Sun Microsystems, Inc. ClassBigInteger.[DB/OL].2003, http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
[关键词] RSA 公钥 私钥 加密 解密 Java语言
随着信息技术的发展,特别是电子商务的发展,网络信息的安全传输逐渐成为人们最为关心的事情。RSA加密算法是目前应用最广泛的公钥加密算法。特别适用于通过internet传送的数据,常用于数字签名和密钥交换。本文用Java语言实现了RSA算法。
一、RSA算法描述
密钥对的产生。选择两个大素数p 和q 。计算:n=p*q,然后随机选择加密密钥e,要求e和(p-1)*(q-1)互质。最后,利用Euclid算法计算解密密钥d,满足e*d=1mod((p-1)*(q-1)),其中n和d也要互质。{e,n}是公钥,{d,n}是私钥。加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,…,mi,块长s,其中2∧s<=n,s尽可能的大。对应的密文是:ci=(mi∧e)mod n,解密时作如下计算:mi=(ci∧d)mod n
二、程序实现的主要思想
Java中的BigInteger类提供了实施RSA公钥加密系统所必需的全部可能性。本程序根据生成公钥/私钥对来论证RSA。用户输入一串字符串,用公钥加密字符串,用私钥解密字符串,所有的结果被输出。
三、主要算法流程和框图
1.主要算法流程
随机生成p,q→计算N=p*q→计算p1=p-1,q1=q-1→计算p1q1=p1*q1→随机生成e,e须满足gcd(p1q1,e)=1,1
程序算法流程图
四、主要模块说明
1.主函数模块
生成公钥/私钥对,调用加密模块对明文进行加密,然后调用解密模块对密文进行解密。
2.转换字符串为大整数模块
转换字符串为大整数。字符串应该仅由ASCII字符组成。简单地将ASCII代码连接而形成整数。
3.转换大整数为ASCII字符串模块
转换大整数为ASCII字符串。整数里的各个字节简单地被转换成对应的ASCII代码。
4.加密模块
用公钥(N,e),应用RSA加密算法对字符串进行加密。字符串被分成多个数据块,每一个数据块被转换为一个整数,然后这个整数x用算式:x∧e (mod N)被编码(加密)。
5.解密模块
用私钥(N,d),应用RSA解密算法对字符串进行解密。首先用算式:x∧d(mod N)解码整数列里的每一个整数x,然后每个被解码的整数被转换为一个字符串,且所有的字符串被连接成一个单一的字符串。
五、程序使用说明
在Textpad中,输入源程序后,保存源程序(假若源程序文件名为RSA.java),编译源程序,编译成功后,在原RSA.java程序所在的文件夹中生成RSA.class文件,然后运行该程序,如果一切运行正常,则输出正确结果。
六、结束语
本文用Java语言实现了RSA算法。由于用到java中的BigInteger类,因此运行效率较高。如果用C语言编程,一个运行结果大约需要2个多小时才能算出,而用java中的BigInteger类编程则几秒钟结果就出来了,因此,对RSA算法用Java编程显然比用C语言编程的效率要高得多。
参考文献:
[1][美]William Stallings著.密码编码学与网络安全:原理与实践(第二版)[M].杨明等译.北京:电子工业出版社,2001
[2]唐大仕编著:Java程序设计[M].北京:北方交通大学出版社,清华大学出版社,2003
[3]田文春韦岗:RSA算法的Java实现[J].计算机工程与应用. 2001,(24):43~44,62
[4]Sun Microsystems, Inc. ClassBigInteger.[DB/OL].2003, http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。