1、rsa算法实验心得竭诚为您提供优质文档/双击可除rsa算法实验心得篇一:RsA算法实验报告实验报告姓名:xxxxxxxxx学号:0xxxxx班级:xxxxxxxxx日期:20XX/12/*题目:RsA算法实验一、实验环境1硬件配置:处理器:Inter(R)core(Tm)i5-2430mcpu2.40ghz(4cpus),2.4ghz内存:2048mbRAm2使用软件:(1)操作系统:win7旗舰版(2)软件工具:microsoftVisualc+6.0二、实验涉及的相关概念或基本原理它是第一个既能用于数据加密也能用于数字签名的算法。算法的名字以发明者的名字命名:RonRivest,Adish
2、amir和LeonardAdleman。但RsA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。RsA的安全性依赖于大数分解。公钥和私钥都是两个大素数(大于100个十进制位)的函数。从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。密钥对的产生。选择两个大素数,p和q。计算:n=p*q然后随机选择加密密钥e,要求e和(p-1)*(q-1)互质。最后,利用euclid算法计算解密密钥d,满足e*d=1(mod(p-1)*(q-1)其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。加密信息m(二进制表示)时,首先把m分成
3、等长数据块m1,m2,.,mi,块长s,其中大。对应的密文是:ci=mie(modn)(a)解密时作如下计算:mi=cid(modn)(b)RsA可用于数字签名,方案是用(a)式签名,(b)式验证。具体操作时考虑到安全性和m信息量较大等因素,一般是先作hAsh运算。RsA的安全性。RsA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RsA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RsA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,
4、模数n必须选大一些,因具体适用情况而定。RsA的速度。由于进行的都是大数计算,使得RsA最快的情况也比Des慢上倍,无论是软件还是硬件实现。速度一直是RsA的缺陷。一般来说只用于少量数据加密。RsA的选择密文攻击。RsA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装(blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:(xm)d=xd*mdmodn前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征-每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用
5、好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用one-wayhashFunction对文档作hAsh处理,或同时使用不同的签名算法。在中提到了几种不同类型的攻击方法。RsA的公共模数攻击。若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。设p为信息明文,两个加密密钥为e1和e2,公共模数是n,则:c1=pe1modnc2=pe2modn密码分析者知道n、e1、e2、c1和c2,就能得到
6、p。因为e1和e2互质,故用euclidean算法能找到r和s,满足:r*e1+s*e2=1假设r为负数,需再用euclidean算法计算c1(-1),则(c1(-1)(-r)*c2s=pmodn另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e和d,而无需分解模数。解决办法只有一个,那就是不要共享模数n。RsA的小指数攻击。有一种提高RsA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。三、实验内容主要的方法:(1)、public
7、staticvoidgetprime()方法名称:产生大数的方法。说明:利用Java语言的中的java.math.bigInteger类的方法中随机产生大数。(2)、publicstaticbooleanmillerRobin(bigIntegernum)方法名称:判断是否是素数的方法。参数说明:num是由getprime方法产生的大数。说明:这个方法判断getprime方法传过来的是否是一个素数,是就返回true,否就返回false。(3)、publicstaticbigIntegerpowmod(bigIntegera,bigIntegert,bigIntegernum)方法名称:大数的幂
8、运算方法。说明:这个方法对传入的大数进行幂运算。(4)、publicstaticbigIntegerinvmod(bigIntegera,bigIntegerb)方法名称:大数的取模运算方法。说明:这个方法对大数进行取模运算。(5)、publicstaticstringencode(stringinstr,bigIntegerprimep,bigIntegerprimeQ,bigIntegern,intnLen,intm,JTextFieldd)方法名称:加密算法。参数说明:instr是从界面输入的明文。primep和primeQ是由getprime方法产生的两个大素数。n是由primep和p
9、rimeQ得到的值。nLen为n的长度。d为公钥。(6)、publicstaticstringDecode(stringinstr,bigIntegerprimep,bigIntegerprimeQ,bigIntegern,intnLen,intm,JTextFielde)方法名称:解密算法。参数说明:instr是从界面输入的明文。primep和primeQ是由getprime方法产生的两个大素数。n是由primep和primeQ得到的值。nLen为n的长度。e为私钥。流程图:RsA公钥加密算法流程图:RsA私钥解密算法流程图:篇二:RsA算法实验报告实验二非对称密码算法RsA一、实验目的通过
10、实际编程了解非对称密码算法RsA的加密和解密过程,加深对非对称密码算法的认识。二、实验环境运行windows或Linux操作系统的pc机,具有JDK1.6版本的Java语言编译环境。三、实验内容和步骤1.对RsA算法的理解RsA算法(公开密钥算法)的原理:(1)选择两个大的素数p和q(典型情况下为1024位)(2)计算n=p*q和z=(p-1)*(q-1).(3)选择一个与z互素的数,将它称为d(4)找到e,使其满足e*d=1modz提前计算出这些参数以后,我们就可以开始执行加密了。首先将明文分成块,使得每个明文消息p落在间隔0*p为了加密一个消息p,只要计算c=pe(modn)即可。为了解密
11、c,只要计算p=cd(modn)即可。可以证明,对于指定范围内的所有p,加密盒解密互为反函数。为了执行加密,你需要e和n;为了执行解密,你需要d和n。因此,公钥是有(e,n)对组成,而私钥是有(d,n)对组成。实例:根据已知参数:p=3,q=11,m=2,计算公私钥,并对明文进行加密,然后对密文进行解密。由题意知:n=p*q33,z=(p-1)*(q-1)20,选d7,计算得e=3,所以c=me(modn)8m=cd(modn)22、RsA算法与Des算法的比较:运行附件的RsATool,输入一大段文字,记录运行时间。再使用Des算法加密相同的文字,记录运行时间,对比这两个时间发现,RsA算法
12、比Des算法慢很多,因为RsA算法进行的是大数运算,所以程序运行的速度比Des慢很多。因此RsA算法只适合于少量数据加密,不适合于大量数据加密。3、算法设计主要的方法:(1)、publicstaticvoidgetprime()方法名称:产生大数的方法。说明:利用Java语言的中的java.math.bigInteger类的方法中随机产生大数。(2)、publicstaticbooleanmillerRobin(bigIntegernum)方法名称:判断是否是素数的方法。参数说明:num是由getprime方法产生的大数。说明:这个方法判断getprime方法传过来的是否是一个素数,是就返回t
13、rue,否就返回false。(3)、publicstaticbigIntegerpowmod(bigIntegera,bigIntegert,bigIntegernum)方法名称:大数的幂运算方法。说明:这个方法对传入的大数进行幂运算。(4)、publicstaticbigIntegerinvmod(bigIntegera,bigIntegerb)方法名称:大数的取模运算方法。说明:这个方法对大数进行取模运算。(5)、publicstaticstringencode(stringinstr,bigIntegerprimep,bigIntegerprimeQ,bigIntegern,intnLe
14、n,intm,JTextFieldd)方法名称:加密算法。参数说明:instr是从界面输入的明文。primep和primeQ是由getprime方法产生的两个大素数。n是由primep和primeQ得到的值。nLen为n的长度。d为公钥。(6)、publicstaticstringDecode(stringinstr,bigIntegerprimep,bigIntegerprimeQ,bigIntegern,intnLen,intm,JTextFielde)方法名称:解密算法。参数说明:instr是从界面输入的明文。primep和primeQ是由getprime方法产生的两个大素数。n是由pr
15、imep和primeQ得到的值。nLen为n的长度。e为私钥。4、源程序:(RsA1.java文件)importjavax.swing.*;importjava.awt.event.*;importjava.math.*;importjava.util.*;importjava.awt.*;importjava.io.*;publicclassRsA1publicstaticvoidmain(stringargs)myFrameframe=newmyFrame();mypanel_fbuttonpanel_fbutton=newmypanel_fbutton(frame,frame.p,fra
16、me.Q,frame.d,frame.e);FlowLayoutfl=newFlowLayout(FlowLayout.cenTeR,0,0);frame.setLayout(fl);frame.add(panel_fbutton);frame.setbounds(150,100,500,480);frame.setDefaultcloseoperation(JFrame.exIT_on_cLose);frame.setVisible(true);classmyFrameextendsJFramepublicmyFrame()setTitle(RsA算法);add(wel);mypanel_p
17、panel_p=newmypanel_p(p);add(panel_p);mypanel_qpanel_q=newmypanel_q(Q);add(panel_q);mypanel_dpanel_d=newmypanel_d(d);add(panel_d);mypanel_epanel_e=newmypanel_e(e);add(panel_e);mypanel_inpanel_in=newmypanel_in(input);add(panel_in);mypanel_outpanel_out=newmypanel_out(output);add(panel_out);mypanel_out1
18、panel_out1=newmypanel_out1(output1);add(panel_out1);mypanel_buttonpanel_button=newmypanel_button(p,Q,d,e,input,output,output1);add(panel_button);privateJLabelwel=newJLabel(RsA算法演示);protectedJTextFieldp=newJTextField(35);protectedJTextFieldQ=newJTextField(35);protectedJTextFieldd=newJTextField(35);pr
19、otectedJTextFielde=newJTextField(35);protectedJTextAreainput=newJTextArea(4,35);protectedJTextAreaoutput=newJTextArea(4,35);protectedJTextAreaoutput1=newJTextArea(4,35);classmypanel_fbuttonextendsJpanelpublicmypanel_fbutton(Frameaframe,JTextFieldap,JTextFieldaQ,JTextFieldad,JTextFieldae)frame=aframe
20、;p=ap;Q=aQ;e=ae;d=ad;privateFrameframe;privateJTextFieldp;privateJTextFieldQ;privateJTextFieldd;privateJTextFielde;classmypanel_pextendsJpanelpublicmypanel_p(JTextFieldap)p=ap;add(newJLabel(add(p);privateJTextFieldp;classmypanel_qextendsJpanelpublicmypanel_q(JTextFieldaQ)Q=aQ;add(newJLabel(add(Q);pr
21、ivateJTextFieldQ;classmypanel_dextendsJpanelpublicmypanel_d(JTextFieldad)质数p:);质数Q:);d=ad;add(newJLabel(公钥:);add(d);privateJTextFieldd;classm(:rsa算法实验心得)ypanel_eextendsJpanelpublicmypanel_e(JTextFieldae)e=ae;add(newJLabel(私钥:);add(e);privateJTextFielde;classmypanel_inextendsJpanelpublicmypanel_in(JT
22、extAreaainput)input=ainput;add(newJLabel(输入明文:);Jscrollpanejsp1=newJscrollpane(input,v,h);add(jsp1);privateJTextAreainput;intv=Jscrollpane.VeRTIcAL_scRoLLbAR_As_neeDeD;inth=Jscrollpane.hoRIZonTAL_scRoLLbAR_As_neeDeD;classmypanel_outextendsJpanelpublicmypanel_out(JTextAreaaoutput)output=aoutput;add(n
23、ewJLabel(生成的密文:);Jscrollpanejsp=newJscrollpane(output,v,h);add(jsp);privateJTextAreaoutput;intv=Jscrollpane.VeRTIcAL_scRoLLbAR_As_neeDeD;inth=Jscrollpane.hoRIZonTAL_scRoLLbAR_neVeR;classmypanel_out1extendsJpanel篇三:RsA算法的实现实验报告RsA算法的实现一、实验目的1.熟悉公钥密码体制;2.掌握产生密钥对的程序设计方法;3.掌握产生加密/解密的程序设计方法。二、实验内容和要求1.进行
24、RsA加密/解密算法的设计;2.对RsA程序进行编译和调试;3.使用编写的程序进行加密和解密。三、实验环境运行windows操作系统的pc机,可以利用具有Vc+语言环境;如果所运用的语言是JAVA,那么也可以利用JAVA语言环境来实现RsA算法的加密和解密。四、实验步骤1.采用c+语言进行本次实验的编写,实验的代码如下:#include#includeintcandp(inta,intb,intc)intr=1;b=b+1;while(b!=1)r=r*a;r=r%c;b-;printf(%dn,r);returnr;voidmain()intp,q,e,d,m,n,t,c,r;chars;p
25、rintf(pleaseinputthep,q:);scanf(%d%d,n=p*q;printf(thenis%3dn,n);t=(p-1)*(q-1);printf(thetis%3dn,t);printf(pleaseinputthee:);scanf(%d,if(et)printf(eiserror,pleaseinputagain:);scanf(%d,d=1;while(e*d)%t)!=1)d+;printf(thencaculateoutthatthedis%dn,d);printf(thecipherpleaseinput1n);printf(theplainpleasein
26、put2n);scanf(%d,switch(r)case1:printf(inputthem:);/*输入要加密的明文数字*/scanf(%d,c=candp(m,e,n);printf(thecipheris%dn,c);break;case2:printf(inputthec:);/*输入要解密的密文数字*/scanf(%d,m=candp(c,d,n);printf(thecipheris%dn,m);break;getch();2、代码的思想:首先随意输入两个素数p和q,然后利用算法计算出p*q即n,再算出(p-1)*(q-1)即t,并且同时输出计算的结果n和t,接下来输入e,经过算法可以计算出d,由此可以知道RsA算法的公钥和私钥;接下来可以有两个选择:一选择输入明文,有明文经过算法可以计算出密文;二输入密文,有密文经过算法可以计算出明文。3、运行以上代码就可以得到实验的结果。五、实验结果实验结果如下图所示:六、实验心得:通过这次的实验,了解了非对称密码算法RsA,会运用一些现成的算法进行编程,对一些比较复杂的算法开始基本认识并深刻的掌握。在以后所涉及这方面的知识将会有全新的了解和掌握。实验报告姓名:刘新平专业:互联网班级:10-03班学号:5410120XX313
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1