资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划rsa算法实验心得实验报告姓名:XXXXXXXXX学号:0XXXXX班级:XXXXXXXXX日期:XX/12/*题目:RSA算法实验一、实验环境1硬件配置:处理器:Inter(R)Core(TM)i5-2430MCPU(4CPUs),内存:2048MBRAM2使用软件:(1)操作系统:win7旗舰版(2)软件工具:MicrosoftVisualc+二、实验涉及的相关概念或基本原理它是第一个既能用于数据加密也能用于数字签名的算法。算法的名字以发明者的名字命名:RonRivest,AdiShamir和LeonardAdleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数的函数。从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。密钥对的产生。选择两个大素数,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分成等长数据块m1,m2,.,mi,块长s,其中#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;printf(pleaseinputthep,q:);scanf(%d%d,&p,&q);n=p*q;printf(thenis%3dn,n);t=(p-1)*(q-1);printf(thetis%3dn,t);printf(pleaseinputthee:);scanf(%d,&e);if(et)printf(eiserror,pleaseinputagain:);scanf(%d,&e);d=1;while(e*d)%t)!=1)d+;printf(thencaculateoutthatthedis%dn,d);printf(thecipherpleaseinput1n);printf(theplainpleaseinput2n);scanf(%d,&r);switch(r)case1:printf(inputthem:);/*输入要加密的明文数字*/scanf(%d,&m);c=candp(m,e,n);printf(thecipheris%dn,c);break;case2:printf(inputthec:);/*输入要解密的密文数字*/scanf(%d,&c);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班学号:54101XX313实验二非对称密码算法RSA一、实验目的通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。二、实验环境运行Windows或Linux操作系统的PC机,具有版本的Java语言编译环境。三、实验内容和步骤1.对RSA算法的理解RSA算法的原理:(1)选择两个大的素数p和q(2)计算n=p*q和z=*.(3)选择一个与z互素的数,将它称为d(4)找到e,使其满足e*d=1modz提前计算出这些参数以后,我们就可以开始执行加密了。首先将明文分成块,使得每个明文消息P落在间隔0*Pn中。为了做到这一点,只要将明文划分成k位的块即可,这里k是满足2kn的最大整数。为了加密一个消息P,只要计算C=Pe(modn)即可。为了解密C,只要计算P=Cd(modn)即可。可以证明,对于指定范围内的所有P,加密盒解密互为反函数。为了执行加密,你需要e和n;为了执行解密,你需要d和n。因此,公钥是有对组成,而私钥是有对组成。实例:根据已知参数:p=3,q=11,M=2,计算公私钥,并对明文进行加密,然后对密文进行解密。由题意知:n=p*q33,z=*20,选d7,计算得e=3,所以C=Me(modn)8M=Cd(modn)22、RSA算法与DES算法的比较:运行附件的RSATool,输入一大段文字,记录运行时间。再使用DES算法加密相同的文字,记录运行时间,对比这两个时间发现,RSA算法比DES算法慢很多,因为RSA算法进行的是大数运算,所以程序运行的速度比DES慢很多。因此RSA算法只适合于少量数据加密,不适合于大量数据加密。3、算法设计主要的方法:、publicstaticvoidGetPrime()方法名称:产生大数的方法。说明:利用Java语言的中的类的方法中随机产生大数。、publicstaticbooleanMillerRobin(BigIntegernum)方法名称:判断是否是素数的方法。参数说明:num是由GetPrime方法产生的大数。说明:这个方法判断GetPrime方法传过来的是否是一个素数,是就返回true,否就返回false。、publicstaticBigIntegerpowmod(BigIntegera,BigIntegert,BigIntegernum)方法名称:大数的幂运算方法。说明:这个方法对传入的大数进行幂运算。、publicstaticBigIntegerinvmod(BigIntegera,BigIntegerb)方法名称:大数的取模运算方法。说明:这个方法对大数进行取模运算。、publicstaticStringEncode(StringinStr,BigIntegerPrimeP,BigIntegerPrimeQ,BigIntegern,intnLen,intm,JTextFieldd)方法名称:加密算法。参数说明:inStr是从界面输入的明文。PrimeP和PrimeQ是由GetPrime方法产生的两个大素数。n是由PrimeP和PrimeQ得到的值。nLen为n的长度。d为公钥。、publicstaticStringDecode(StringinStr,BigIntegerPrimeP,BigIntegerPrimeQ,BigIntegern,intnLen,intm,JTextFielde)方法名称:解密算法。参数说明:inStr是从界面输入的明文。PrimeP和PrimeQ是由GetPrime方法产生的两个大素数。n是由PrimeP和PrimeQ得到的值。nLen为n的长度。e为私钥。4、源程序:import*;import*;import*;import*;import*;import*;publicclassRSA1publicstaticvoidmain(Stringargs)MyFrameframe=newMyFrame();MyPanel_fbuttonpanel_fbutton=newMyPanel_fbutton(frame,);FlowLayoutfl=newFlowLayout(,0,0);(fl);(panel_fbutton);(150,100,500,480);(_ON_CLOSE);(true);classMyFrameextendsJFramepublicMyFrame()setTitle(RSA算法);add(wel);MyPanel_ppanel_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_out1panel_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);protectedJTextFielde=newJTextField(35);protectedJTextAreainput=newJTextArea(4,35);protectedJTextAreaoutput=newJTextArea(4,35);protectedJTextAreaoutput1=newJTextArea(4,35);classMyPanel_fbuttonextendsJPanelpublicMyPanel_fbutton(Frameaframe,JTextFieldaP,J
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号