RSA算法的实现一、试验目的1、理解公钥密码体制基本原理。2、理解并可以编写RSA算法。3、纯熟应用C++编程实现算法。二、试验内容运用C++编程实现RSA算法密码体制,算法描述参照书本P191-204。三、试验原理1、算法原理环节如下(这里设B为是实现着)(1)B寻找出两个大素数p和q。(2)B计算出n=p*q和(n)=)(p-1)*(q-1)。(3)B选择一种随机数e(0=m)return1;elsereturn0;ed}(2)模幂算法(这里以明文m为一种为例)①令f=1;②用for循环遍历从i=1到i=b,令f=(f*a)%n③输出f,f的值即为模幂的成果。intmultiplication(inta,intb,intn){intf=1;for(inti=1;i<=b;i++){f=(f*a)%n;}returnf;}(3)扩展欧几里得算法由扩展欧几里得算法可以计算整数s和t,使得s*e+t*N=(e,N)=1,则e的乘法逆元等价于smodN。①定义变量x1,x2,x3,y1,y2,y3,t1,t2,t3,q;②令x1=y2=1;x2=y1=0;③计算q=x3/y3;t1=x1-q*y1;t2=x2-q*y2;t3=x3-q*y3;④x1=y1;x2=y2;x3=y3;y1=t1;y2=t2;y3=t3;⑤当y3=1时,*result=y2;result的成果即为所求乘法逆元;假如y3!=1,则返回次序执行③、④步直到满足y3=1intExtendedEuclid(intf,intd,int*result){intx1,x2,x3,y1,y2,y3,t1,t2,t3,q;x1=y2=1;x2=y1=0;if(f>=d){x3=f;y3=d;}else{x3=d;y3=f;}while(1){if(y3==1){*result=y2;/*两个数互素则resutl为其乘法逆元,此时返回值为1*/return1;}q=x3/y3;t1=x1-q*y1;t2=x2-q*y2;t3=x3-q*y3;x1=y1;x2=y2;x3=y3;y1=t1;y2=t2;y3=t3;}}(4)主函数①输入两个数字判断与否为素数,当不为素数时重新输入。如输入1711②输入e,得到公钥。如输入e为7③调用ExtendedEuclid(e,N,&d)函数,得到d,和私钥。如d=23④输入明文长度。如输入5如输入明文为5688781223⑤开始加密,调用加密函数Encryption()。则输入密文为781156177133⑥开始解密,调用解密函数Decipher()。则解密后明文为5688781223四、算法流程图开始输入两个素数p和q调用Prime()找出N=(p-1)*(q-1)的所有公约数YN五、试验心得和总结我是这次试验重要负责人,由于试验要分组做,每个人都要负责一种项目,在我们组前两次试验中,我重要负责编写代码,像写汇报、做PPT我几乎没有参与。但这次不一样样了,因此的工作自己都要操起心来,比同组的同学多做某些工作,多分担某些,不过组员也很给力,试验的时候给了我诸多提议与指导,制作PPT时给了我诸多提议和协助,有了团体精神因此效率提高了诸多。因此这次试验下来感觉自己比此前做试验多学了好多东西,由于何都要动手做,不懂得东西要查询清晰。我感觉做试验对学生真正掌握知识很重要。上课的时候只是听老师讲RSA算法顶多就是学会理论知识,而真正实践动手做的时候就会发现自己漏洞百出,由于考虑问题不周全编写代码的时候总是出错,编写的不完善,算法的功能没有所有体现,最终又翻看了书本大一的时候学的C++书本、大二学的密码学基础书本和信息安全概论书本。巩固了某些已经忘掉了的基础知识,有不太理解的算法实现措施就通过上网查询以及与同学讨论来处理这次写代码是我参与编写过的比较长的代码,RSA算法的算法原理我理解的比较清晰,因输入不等于N公约数的e调用ExtendEuclid(e,N,&d)开始加密调用Encryption()输入明文长度len及明文i