您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > RSA加解密课程设计报告
869088《密码课程设计》报告—RSA加解密算法设计告班级:姓名:学号:指导老师:时间:20126月11-6月22-1-目录1.算法简介..........................................................21.1简介...........................................................21.2算法安全性...............................................22.算法原理..........................................................33.流程图..............................................................31.1数据处理函数............................................41.2互素判断函数............................................51.3main函数...............................................64.算法实现..........................................................85.输出结果........................................................101.1输入素数.................................................101.2加密.........................................................111.3解密.........................................................116.个人小结........................................................12-2-一.算法简介1.简介RSA算法是当前最著名、应用最广泛的公钥系统。并于1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。它是一个基于数论的非对称(公开钥)密码体制,是一种分组密码体制。其名称来自于三个发明者的姓名首字母。2.算法安全性对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。尽管如此,只有一些RSA算法的变种[来源请求]被证明为其安全性依赖于因数分解。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。-3-二.算法原理1.选择两个不同的大素数p、q(目前两个数的长度都接近512bit是安全的);2.计算n=p*q。3.计算n的欧拉函数t=(p-1)(q-1)。4.选择整数e作为公钥,使e与t互素,且1et。5.用欧几里得算法计算d作为私钥,使d*e=1modt。6.加密:C=M^emodn7.解密:M=C^dmodn=(M^e)^dmodn=M^e^dmodn。三.流程图1.数据处理函数candp(加解密函数)开始r=1-4-YNb=b+1r=a*rr=r%cb--b!=1输出r结束-5-2.公钥e与t的互素判断函数YNNYN开始t=xx=yy=t%yy!=1x==1返回0返回1输出结果结束-6-3.Main函数YNYN开始输入p,qn=p*qt=(p-1)*(q-1)输入ee=1‖‖et‖‖fun(e,t)不合要求d=1d++(e*d)%t!=1-7-输出d输入1输入2输出结果c输出结果m输入明文m输入密文cc=candp(m,e,n)m=candp(c,d,n)-8-四.算法实现#includestdio.hintcandp(inta,intb,intc)//数据处理函数,实现幂的取余运算{intr=1;b=b+1;while(b!=1){r=r*a;r=r%c;b--;}printf(%d\n,r);returnr;}intfun(intx,inty)//公钥e与t的互素判断{intt;while(y){t=x;x=y;y=t%y;}if(x==1)return0;//x与y互素时返回0elsereturn1;-9-//x与y不互素时返回1}intmain(){intp,q,e,d,m,n,t,c,r;printf(请输入两个素数p,q:);scanf(%d%d,&p,&q);n=p*q;printf(计算得n为%3d\n,n);t=(p-1)*(q-1);//求n的欧拉数printf(计算得t为%3d\n,t);printf(请输入公钥e:);scanf(%d,&e);if(e1||et||fun(e,t)){printf(e不合要求,请重新输入:);//e1或et或e与t不互素时,重新输入scanf(%d,&e);}d=1;while(((e*d)%t)!=1)d++;//由公钥e求出私钥dprintf(经计算d为%d\n,d);printf(加密请输入1\n);//加密或解密选择-10-printf(解密请输入2\n);scanf(%d,&r);switch(r){case1:printf(请输入明文m:);//输入要加密的明文数字scanf(%d,&m);c=candp(m,e,n);printf(密文为%d\n,c);break;case2:printf(请输入密文c:);//输入要解密的密文数字scanf(%d,&c);m=candp(c,d,n);printf(明文为%d\n,m);break;}}五.输出结果:1.输入素数:-11-2.输入明文进行加密3.输入密文进行解密-12-六.个人小结通过本次密码学的课程设计,是我对C语言的有了进一步的了解,在此过程中遇到了许多的问题,如该实验中不知道如何将字母进行分组后的RSA的加解密,使我明白了自己学到的还太少了,以前是在是没有好好的动手来编程,导致这次的课程设计这么辛苦才完成,另外该算法还不能实现对任意长度的字符串进行加解密,这是不足也是今后我努力的小小的动力。为此我确定了自己将来的方向,另外这次的课程设计使我搁置已久的编程能力得到了小小的回忆,我坚信我继续努力以后一定能学好C的编程的。
本文标题:RSA加解密课程设计报告
链接地址:https://www.777doc.com/doc-2848659 .html