网络安全实验_RSA算法.docxVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络安全作业 1.RSA 算法流程如下: (1)密钥生成算法流程: 随机地选择两个大素数 p和q (需); 计算乘积n=px q; 计算欧拉函数z= (n)=(p-1)(q-1)。其数值等于小 于n并且与n互质的整数的个数。 选择一个随机数e,使e与z互质,且1ezo 计算 d,使d*e=1 mod z 。 其中,公钥 KP={e,n} ,私钥 KS={d,n} o (2) RSA 加密、解密的过程 首先将明文分块并数字化,每个数字化明文块的长度小于或等于 log 2n。然后对每个明文块M依次进行 加、解密: 加密:使用公钥 e和加密密文m,即C=Memod n; 解密:使用私钥d将密文c解密,获得明文 m,即M=cdmod n。 具体的数据结构与算法: (1 )存储大整数的数据结构: typedef struct { int length; unsigned int n[MAX]; } Lint; 这里大整数用65536进制表示并使用结构体Lint存储大整数。Lint由一个整型变量length和一个无符号整 型数组n[MAX]构成,length存储大整数的位数,n[MAX]具体存储每一位的值。 (2)具体的算法: 具体的算法主要参考了此书:振江等译?《密码编码学 一一加密方法的C与C十十实现(第二版)》.: 电子工业, 2003 具体的算法包括:基于上述数据结构的大整数的加、减、乘、除、模幂运算,求逆元运算,以及大素 数的判定等。这些算法的具体容都在原程序与其注释中。 源程序 此程序的开发环境是 Microsoft Visual studio 2008 。 (1) RSA 生成密钥源程序及运行结果 #includeiostream #includecmath using namespace std; void main() { int p,q; cout*****RSA 生成密钥算法 *****endlendl; cout 请输入两个较大的素数: endl; cinpq; coutp=p,q=qendl; int n,o; n=p*q; o=(p-1)*(q-1); coutn=n,o=oendl; cout?请从(0,0-1)中选择一个与vvovv互素的数 e: vvendl; int e,i; float d; cin?e; for(i=1;;i++) { d=(float)(o*i+1)/e; if(d-(int)d==0) break; } coutvve=vevv,d=vvdvve ndl; cout?公开密钥 Pk={e,n}={vvevv,vvnvv}vvendl; coutvv秘密密钥 Sk={d,n}={vvdvv,vvnvv}vvendl; coutvvendl; coutvv请输入要加密的正整数(以 -1结束):vvendl; int m1[500],m3[500],m4[500]; double m2[500]; int j; for(j=0;jv500;j++) { cinm1[j]; if(m1[j]==-1) break; m2[j]=pow(m1[j],e); m4[j]=m2[j]/n; m3[j]=m2[j]-m4[j]*n; } coutvv密文为:vvendl; int k; for(k=0;kvj;k++) coutvvm3[k]vv; coutvvendl; } 程序运行结果及分析: *****Rgn生成密钥算迭***** 请输入两个较夫的素数: 343S55 43545 43 5 n=2075200587,0=207481348B 请从5, 2074813487中选择一个与20748£3498互素的数6 45457 6=454657,4=4231 公幵霁月 Pk-e ,n -45465? fe^^tJSk=d,ri=4231,20?5200S8? 算法按照要求进行,生成的密钥也符合要求。 (2)RSA加密及解密算法实现源程序及运行结果 #include stdafx.h #include vstdio.h #include vstdlib.h #include vstring.h #include vtime.h #define MAX 200 /定义大整数的最大位数,200完全可以满足p与q达到768bit位的要求,可以选择更大的数 #define GREAT 1 //定义大整数比较时的返回值 #define EQUAL 0 #define LOW -1 33保证p与q达到512bit长#define PL 33 〃如果重新生成p与q, 33保证p与q达到512bit长 度。 typedef struct { int length; unsigned in

文档评论(0)

laugh + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档