课程整体设计介绍.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程整体设计介绍.ppt

第4章 数据加解密 实训2-1: RSA算法设计 实训目的 掌握公开密钥体制基本原理; 掌握RSA算法的原理以及产生公钥和私钥的方法,通过C++编程实现RSA算法,加深对RSA加密体制的了解,提高逻辑思维能力和编程技术。 实训要求 分析RSA算法的功能需求,详细设计实现RSA算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。 程序设计说明 包括变量定义、模块组成、接口说明、使用方法、运行要求等。 实验过程中所碰到问题和解决方法 实训步骤 1.RSA 算法描述 (1)取两个随机大素数p和q(保密) (2)计算公开的模数n = p*q(公开) (3)计算秘密的欧拉函数φ(n)=(p-1)*(q-1)(保密),两个素数p和q不 再需要,应该丢弃,不要让任何人知道。 (4)随机选取整数e,满足1eφ(n),gcd(φ(n),e)=1(公开e,加密密钥) (5)在模φ(n)下,计算e的乘法逆元d,满足: e· d ≡ 1 mod φ(n) (保密d,解密密钥) (6)将明文x(其值的范围在0到n-1之间)按模为n自乘e次幂以完成加密 操作,从而产生密文 y(其值也在0到r-1范围内)y=xe (mod n) (7)将密文y按模为n自乘d次幂,完成解密操作 x=yd (mod n) 实验要求与提示 从键盘输入两个素数 p,q,并输出参数 N, φ(N), e, d 从键盘输入明文数据 m,计算出密文数据 c 从键盘输入密文数据 c,计算出明文数据 m 如何判断一个数是素数 如何判断两个数互素 乘法逆元怎么实现 当p=7,q=17,e=5,d=77,加密m=19,得出实验结果 如果加密的消息为char类型,如何实现加解密?(不强制要求做,但能实现的同学有加分!!) 实验内容 1.分析RSA算法 ? 2.设计RSA算法实现流程图 ? 3.用C++语言或其他语言实现RSA算法? 设计产生素数程序模块:?void?primes()? 设计检查是否为素数的模块:int?check(int?n)? 设计求最大公约数模块:?int gcd(int a, int b) 设计求乘逆模块?:int?pf_c(int?m,int?k)? 设计选择密钥算法:void?ckey()? 设计加密信息模块:pf_c1() 设计界面信息模块:pf_c2() 设计主程序进行操作菜单选择 ? 4.调试程序 附:用于参考的RSA算法源代码(部分函数自己补充) #includeiostream.h #includestdio.h #includestdlib.h #includestring.h #includemath.h int r,sk,pk,Euler; primes1(int n1)//判断素数 { ///判断n1是否为素数,是则返回n1, 否则返回0 return 0; return n1; } //欧几里德算法求解最大公约数 int gcd(int a, int b) { //a为初选密钥,b为欧拉函数值 int c,c1,b1; c=b;a=a+1;b1=b; do {a--;c=a;c1=1;b=b1; while(c1!=0)//求解最大公约 { c1=b%c;if (c1!=0){b=c;c=c1;}; } }while(c1);//最大公约数gcd(a,b)=1 return(a);//返回初选密钥值 } //检查n是否是素数 int check(int n) { int sq1; n=abs(n);sq1=1; do { sq1=primes1(n); if (sq1==0) { cout输入值不是素数,请重新输入endl; cinn; } } while(sq1==0); return n;//返回素数 } void primes() {int p,q; cout输入值不要太大,防止溢出endl; cout请输入p:;cinp; p=check(p); cout请输入q:;cinq; q=check(q); r=p*q; cout素数 p=p q=q; Euler=(p-1)*(q-1); cout 欧拉函数:Euler; cout 公开模数:rendlendl; } int input(int m) {while(m=r) {coutm

文档评论(0)

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

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

1亿VIP精品文档

相关文档