ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:428.24KB ,
资源ID:3032620      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3032620.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(RSA加密解密的设计及其实现.docx)为本站上传会员【快乐****生活】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

RSA加密解密的设计及其实现.docx

1、上海电力学院 《应用密码学》课程设计 题  目:  RSA加密解密设计和实现               院  系:  计算机科学和技术学院   专业年级:  级 学生姓名:  李正熹   学号:  3273   指导老师:        田秀霞     1月 8日 目录 目录 1.

2、 设计要求 2. 开发环境和工具 3. 设计原理(算法工作原理) 4. 系统功效描述和软件模块划分 5. 设计关键代码 6. 参考文件 7. 设计结果及验证 8. 软件使用说明 9. 设计体会 附录 1. 设计要求 1 随机搜索大素数,随机生成公钥和私钥 2 用公钥对任意长度明文加密 3 用私钥对密文解密 4 界面简练、交互操作性强 2. 开发环境和工具 Windows XP操作系统 Microsoft Visual C++ 6.0 1. 创建rsa工程 2. 在rsa工程中创建32

3、73 李正熹cpp文件 3. 设计原理 RSA算法介绍 公开密码算法和其它密码学完全不一样,它是基于数学函数而不是基于替换或置换。和使用一个密钥对称算法不一样,公开密钥算法是非对称,而且它使用是两个密钥,包含用于加密公钥和用于解密私钥。公开密钥算法有RSA、Elgamal等。 RSA公钥密码算法是由美国麻省理工学院(MIT)Rivest,Shamir和Adleman在1978年提出来,并以她们名字有字母命名。RSA是第一个安全、实用公钥密码算法,已经成为公钥密码国际标准,是现在应用广泛公钥密码体制。 RSA基础是数论Euler定理,其安全性基于二大整数因子分解问题

4、困难性,公私钥是一对大素数函数。而且该算法已经经受住了多年深入密码分析,即使密码分析者既不能证实也不能否定RSA安全性,但这不恰恰说明该算法有其一定可信度。 4. 系统功效描述和软件模块划分 功效: 1. 进行加密 加密 第一步,随机两个素数p和q,并求出n = p*q,然后再求出n欧拉函数值phi。 第二步,在[e,phi]中选出一个和phi互素整数e,并依据e*d ≡1(mod phi),求出e乘法逆元。至此我们已经得到了公开密钥{e,n}和秘密密钥{d,n}。 第三步,让用户输入要进行加密小于n一组正整数(个数不超出MAXLENGTH),输入以-1为结束

5、标志,实际个数存入size中,正整数以clear[MAXLENGTH]保留。 第四步,对第三步所得明文clear[MAXLENGTH]进行加密。遍历clear[size],对每一个整数用以下算法进行加密,并将加密后密文保留在Ciphertext[MAXLENGTH]中。 第五步,输出密文Ciphertext[MAXLENGTH] 2. 进行解密 第一步,输入加密后密文Ciphertext1[MAXLENGTH],输入以-1为结束标志 第二步,输入解密密钥[d,phi],对密文进行解密,结果保留在DecryptionText[MAXLENGTH]中。 第三步,输出解密后明文D

6、ecryptionText[MAXLENGTH] 生成随机素数: 先生成一个随机数 然后判定它是否为素数 从而输出 unsigned long foo() //生成随机数 int panduan(unsigned long b) //判定是否为素数 unsigned long tiqu(unsigned long &p,unsigned long &q) //从随机素数中选择两个为p和q 求e时需要用到e和phi互逆 所以在随机产生e同时需要作互逆判定 若互逆则输出随机e 不然重新生成e int gcd(int x,int y) //判定两数是否为互素 在p、q、e全

7、部准备就绪时候就能够进行加解密运算 因为考虑到溢出 所以3个一组进行加解密 void Encryption() //加密算法 void Decryption() //解密算法 5. 设计关键代码 unsigned long foo() { unsigned long random = 0; srand((int)time(0)); random = rand() % 300; return random; } srand函数是随机数发生器初始化函数 需要提供一个种子 这里使用time来获取系统目前时间 rand() %

8、300是随机0-299整数 //以下为加密算法 void Encryption() {//加密算法 cout << "随机生成两个较大素数:"<

9、 e=foo(); if(gcd(e,phi)==1&&e>=100&&e<=300&&e!=q&&e!=p) break; } cout<

11、 count; for(int j = 0; j> clear[j]; if( clear[j] == -1 ) break; count = e; while(count > 0) {//对明文进行加密 Ciphertext =(clear)^ e mod n Ciphertext[j] = (Ciphertext[j] * clear[j]) % n; //加密算法 count-- ; } } cout << " 密文为:" ; size = j;//实际

12、密文长度 for(int k=0; k> Cip

13、hertext1[u]; if( Ciphertext1[u] == -1 ) break; } cout<<"输入密钥解密(d,n)"<>pp>>kk; for(int j = 0; j < size; j++) { count = pp; while(count > 0) {//对密文进行解密 DecryptionText =(Ciphertext)^ d (mod n) DecryptionText[j] = ((DecryptionText[j] * Ciphertext1[j]) %kk); c

14、ount-- ; } } cout << " 解密后明文为:"; for( int k = 0; k < size; k ++) cout << DecryptionText[k] << " "; cout << endl ; } 6. 参考文件 [1]赛迪网.RSA :云安全需紧迫处理安全隐患.旧金山:赛迪网,. [2]赛迪网.RSA主席认为云安全成安全领域趋势.旧金山:赛迪网,. [3]魏晨. 安全风向标:品味RSA 信息安全大会.旧金山:赛迪网,. [4]四夕.新安全威胁而前需要新安全架构.旧金山:赛迪网,. [5]王茜.倪建伟,一个基于

15、RSA加密算法. 重庆大学学报,, 28 (1):68-72. [6]周升力.RSA密码算法研究和改善实现.现代计算机,:51-53. [7]管占明. 邓亚娟.RSA加密算法研究及应用. 科技广场,:98- 99. [8]胡向东,魏琴芳等.应用密码学.北京市:电子工业出版社,: 114-119. [9]卢开澄.计算机密码学.北京市:清华大学出版社,: 73-77 [10]史予荣.软件加密技术从入门到精通,北京市:清华大学出版社.: 74-77. 7. 设计结果及验证 进行加密 得到公钥(113,11021)和私钥(2105,11021) 加密明文123 587 114 5

16、6 18 9 得到密文1453 385 7882 6329 4873 2744 输入密文 解密 得到先前加密明文123 587 114 56 18 9 8. 软件使用说明 1. 选择RSA加解密系统功效 1为加密 2为解密 0为退出 输入其它错误重新输入 2.输入1 进行加密过程 输入需要加密明文 3个一组 空格空开 -1结束 生成密文 而且返回主界面 2. 输入2进行解密 输入加密好密文 -1结束 输入密钥 d n 解密得到加密前明文 解密成功 返回主界面 9.设计体会 RSA课程设计中,包含了加

17、解密过程,刚开始对做设计时候,认为对于RSA加解密只要套用公式就能够很方便地进行,实现并不是很困难。不过在真正实现时候还是碰到了不少问题,在随机产生素数时候,不一样实现方法会含有不一样复杂度,从而使得时间效率也有所不一样,若直接生成素数,系统需要很长一段时间来生成,而随机生成一个数后再判定是否为素数能够降低很多时间,效率也就提升了。 在加解密时候,起初使用是int型整形变量,不过发觉int型只有4位长度8字节,所以在计算时,数字一大就会产生溢出,所以使用了数组进行了加解密。而在大素数生成时,能够生成很大素数,不过在加密时,因为程序效率过于低以至于一天全部没有算出结果,所以在实现时使用了可进行

18、运算和实现较大素数而并不是大素数。随机大素数进行RSA加解密程序还需要时间进行深入改善。需要深入调用大整数加减乘除算法,素数明文密文密钥公钥全部要使用数组才能加以实现,在此临时保留这个程序,将用更充足时间来实现。 总结这次课程设计,不可否定又是一次对于自己编程能力提升和团体合作加深,自己动手编程真是一个成就感,然而在这以外,我还发觉了自己会有部分突发奇想思绪,会发觉和挖掘实现试验时一些过程优化,而这些思绪又能够帮助自己来完成程序。这次课程设计不足是还没有完全完成课程设计所需要任务要求,写程序还是略微有点简单化了,可能自己能力还是有限,在静候时间里还需要愈加磨练才行。 附录 #in

19、clude #include #include #include using namespace std; #define MAXLENGTH 500 //明文最大长度,即所许可最大整数个数 int size = 0;//保留要进行加密正整数个数 unsigned long p, q; //两个大素数 int n, phi; //n = p * q,phi = (p-1) * (q-1) 是n欧拉函数值 int e; //{e, n}为公开密钥 int d; //{d, n}

20、为秘密密钥 long clear[MAXLENGTH], Ciphertext[MAXLENGTH],Ciphertext1[MAXLENGTH];//分别用于存放加//密前明//文和加密后密文 long DecryptionText[MAXLENGTH];//存放解密后明文 //////////////////////////////////////////////////////////// unsigned long foo() { unsigned long random = 0; srand((int)time(0)); random

21、 rand() % 300; return random; } int panduan(unsigned long b) { int flag=1; if(flag) { for(unsigned long j=2;j<=sqrt(b);j++) { if(b%j==0) { flag=0; //cout<

22、signed long tiqu(unsigned long &p,unsigned long &q) { label: while(1) { p=foo(); if(panduan(p)&&p>100&&p<300) { //cout<<"p="<100&&q<300) { //cout<<"q="<

23、 cout<<"p="<

24、 1) * ( q - 1 );//求解 n 欧拉函数值 cout << " n = " << n << ", phi = " << phi << endl; cout << " 请从[0," << phi - 1 << "]中选择一个和 " << phi << " 随机生成互素数 e:"; while(1) { e=foo(); if(gcd(e,phi)==1&&e>=100&&e<=300&&e!=q&&e!=p) break; } cout<

25、///求解乘法逆元 e * d ≡ 1 (mod phi) d0 = (float)(phi*i+1) / e; if( d0 - (int)d0 == 0 ) break; } d = (int)d0; cout << endl; cout << " e = " << e << ", d = " << d << endl; cout << " 公开密钥 Pk = {e,n} = {" << e << "," << n << "}" << endl; cout << " 秘密密钥 Sk = {d,n} = {" << d << "," << n <

26、< "}" <<"统计私钥"<< endl; cout << endl; cout << " 请3位一组输入要加密正整数(以-1结束):" << endl; cout << " 加密前明文为:"; for( i = 0; i < MAXLENGTH; i++) Ciphertext[i] = 1; int count; for(int j = 0; j> clear[j]; if( clear[j] == -1 ) break; count = e; while(count

27、> 0) {//对明文进行加密 Ciphertext =(clear)^ e mod n Ciphertext[j] = (Ciphertext[j] * clear[j]) % n; //加密算法 count-- ; } } cout << " 密文为:" ; size = j;//实际密文长度 for(int k=0; k

28、//////////////// //以下为解密算法 void Decryption() {//解密算法 int pp,kk; for(int i = 0; i < MAXLENGTH; i++) DecryptionText[i] = 1; int count; cout<<"请输入要解密密文(以-1结束):"<> Ciphertext1[u]; if( Ciphertext1[u] == -1 ) break; } cout<<"输入

29、密钥解密(d,n)"<>pp>>kk; for(int j = 0; j < size; j++) { count = pp; while(count > 0) {//对密文进行解密 DecryptionText =(Ciphertext)^ d (mod n) DecryptionText[j] = ((DecryptionText[j] * Ciphertext1[j]) %kk); count-- ; } } cout << " 解密后明文为:"; for( int k = 0; k < size; k

30、 ++) cout << DecryptionText[k] << " "; cout << endl ; } void main() { int sign=1; int chioce=0; while(sign==1) { cout<<"——————————————————"<

31、 "<>chioce; switch(chioce) { case 1: Encryption(); break; case 2: Decryption(); break; case 0: sign=0; break; default: cout<<"输犯错误重新输入"<

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服