RSA加密算法..doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络工程131 任国健 1308060317 一、RSA加密简介 RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。 1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。尽管如此,只有一些RSA算法的变种被证明为其安全性依赖于因数分解。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。 (n, e) 作为公钥发布 选择一个整数使得是关于模的模反元素即,,把(n, d) 作为私钥保存。 将 p 和 q 的记录销毁。 设明文分组,则加密算法为: 对密文分组的解密运算为: 代码实现 //主函数 void main() { int p,q,e,d,n,yn,m[1000],c[10000];//c[10000]存放加密后的数字密文,m[1000]存放解密后的数字明文,即英文明文在zimu_biao[69]中的下标。 int i,j; //i,j用于循环遍历数组 int mi_yue; //用户输入的密钥 int count=1; //统计输入密钥的次数,count3时将不允许用户再输入。 char min_wen[1000],re_min_wen[1000];//分别为用户输入的明文、密文,解密后的明文。 //密钥生成 char zimu_biao[69]=abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789.?!; printf(请输入您要发送的明文文件(小写英文表示):\n); printf(******************************************************\n); gets(min_wen); printf(******************************************************\n); printf(\n加密开始,请按要求操作。。。\n\n); printf(请输入第一个大素数p:\n); while(1){ scanf(%d,p); if(Witness(2,p)==1){ printf(您输入的第一个大素数 %d 符合要求\n,p); break; } else printf(您输入的 %d 不是素数,请重新输入:\n,p); } printf(请输入第二个大素数q:\n); while(1){ scanf(%d,q); if(Witness(2,q)){ printf(您输入的第二个大素数 %d 符合要求\n,q); break; } else printf(您输入的 %d 不是素数,请重新输入:\n,q); } n=p*q; yn=(p-1)*(q-1); printf(请输入加密指数(整数)e,且0e%d\n,yn);//下面由用户设定加密指数 while(1){ scanf(%d,e); if(gcd(yn,e)==1){ printf(您输入加密指数 %d 与 %d 互素,符合要求\n,e,yn); break; } else printf(您输入加密指数 %d 与 %d 不互素,请重新输入。。。\n,e,yn); } d=ex

文档评论(0)

tiangou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档