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

加入VIP,免费下载
 

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

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(RSA加密解密地设计与实现.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

RSA加密解密地设计与实现.docx

1、RSA加密解密地设计与实现上海电力学院应用密码学课程设计 题目: RSA加密解密的设计与实现 院系: 计算机科学与技术学院 专业年级: 2010级 学生姓名: 李正熹学号: 20103273 指导教师: 田秀霞 2013年1月 8日1. 设计要求2. 开发环境与工具3. 设计原理(算法工作原理)4. 系统功能描述与软件模块划分5. 设计核心代码6. 参考文献7. 设计结果及验证8. 软件使用说明9. 设计体会附录1. 设计要求1 随机搜索大素数,随机生成公钥和私钥2 用公钥对任意长度的明文加密3 用私钥对密文解密4 界面简洁、交互操作性强2. 开发环境与工具Windows XP操作系统Micr

2、osoft Visual C+ 6.01. 创建rsa工程2. 在rsa工程中创建20103273 李正熹cpp文件3. 设计原理RSA算法简介公开密码算法与其他密码学完全不同,它是基于数学函数而不是基于替换或置换。与使用一个密钥的对称算法不同,公开密钥算法是非对称的,并且它使用的是两个密钥,包括用于加密的公钥和用于解密的私钥。公开密钥算法有RSA、Elgamal等。RSA公钥密码算法是由美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在1978年提出来的,并以他们的名字的有字母命名的。RSA是第一个安全、实用的公钥密码算法,已经成为公钥密码的国际标准,是目前应用广泛的公

3、钥密码体制。 RSA的基础是数论的Euler定理,其安全性基于二大整数因子分解问题的困难性,公私钥是一对大素数的函数。并且该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定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一组正整数(个数不超过

4、MAXLENGTH),输入以-1为结束标志,实际个数存入size中,正整数以clearMAXLENGTH保存。第四步,对第三步所得的明文clearMAXLENGTH进行加密。遍历clearsize,对每一个整数用以下算法进行加密,并将加密后的密文保存在CiphertextMAXLENGTH中。第五步,输出密文CiphertextMAXLENGTH2. 进行解密第一步,输入加密后的密文Ciphertext1MAXLENGTH,输入以-1为结束标志第二步,输入解密密钥d,phi,对密文进行解密,结果保存在DecryptionTextMAXLENGTH中。第三步,输出解密后明文DecryptionT

5、extMAXLENGTH生成随机素数: 先生成一个随机数 然后判断它是否为素数 从而输出unsigned long foo() /生成随机数int panduan(unsigned long b) /判断是否为素数unsigned long tiqu(unsigned long &p,unsigned long &q) /从随机素数中选取两个为p和q求e时需要用到e与phi的互逆 所以在随机产生e的同时需要作互逆判断 若互逆则输出随机e 否则重新生成eint gcd(int x,int y) /判断两数是否为互素在p、q、e都准备就绪的时候就可以进行加解密的运算 因为考虑到溢出 所以3个一组进

6、行加解密void Encryption() /加密算法void Decryption() /解密算法5. 设计核心代码unsigned long foo() unsigned long random = 0; srand(int)time(0); random = rand() % 300; return random;srand函数是随机数发生器的初始化函数需要提供一个种子 这里使用time来获取系统当前时间 rand() % 300是随机0-299的整数/以下为加密算法void Encryption()/加密算法 cout 随机生成两个较大的素数:endl ; tiqu(p,q); n =

7、 p * q;/求解 n, phi = (p - 1) * ( q - 1 );/求解 n 的欧拉函数值 cout n = n , phi = phi endl; cout 请从0, phi - 1 中选择一个与 phi =100&e=300&e!=q&e!=p) break; couteendl; float d0; for( int i = 1; ; i+) /求解乘法逆元 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

8、 , d = d endl; cout 公开密钥 Pk = e,n = e , n endl; cout 秘密密钥 Sk = d,n = d , n 记录私钥 endl; cout endl; cout 请3位一组输入要加密的正整数(以-1结束): endl; cout 加密前的明文为:; for( i = 0; i MAXLENGTH; i+) Ciphertexti = 1; int count; for(int j = 0; j clearj; if( clearj = -1 ) break; count = e; while(count 0) /对明文进行加密 Ciphertext =

9、(clear) e mod n Ciphertextj = (Ciphertextj * clearj) % n;/加密算法 count- ; cout 密文为: ; size = j;/实际密文长度 for(int k=0; kj; k +) cout Ciphertextk ; cout endl ;/以下为解密算法void Decryption()/解密算法 int pp,kk; for(int i = 0; i MAXLENGTH; i+) DecryptionTexti = 1; int count; cout请输入要解密的密文(以-1结束):endl; for(int u = 0;

10、 u Ciphertext1u; if( Ciphertext1u = -1 ) break; cout输入密钥解密(d,n)ppkk; for(int j = 0; j 0) /对密文进行解密 DecryptionText =(Ciphertext) d (mod n) DecryptionTextj = (DecryptionTextj * Ciphertext1j) %kk); count- ; cout 解密后的明文为:; for( int k = 0; k size; k +) cout DecryptionTextk ; cout endl ;6. 参考文献1赛迪网RSA 2010

11、:云安全需急迫解决的安全隐患.旧金山:赛迪网,2010.2赛迪网RSA主席认为云安全成2010安全领域趋势.旧金山:赛迪网,2010.3魏晨. 安全风向标:品味RSA 2012信息安全大会.旧金山:赛迪网,2012.4四夕新的安全威胁而前需要新的安全架构.旧金山:赛迪网,2012.5王茜倪建伟,一种基于RSA的加密算法. 重庆大学学报,2005, 28 (1):68-72.6周升力RSA密码算法的研究与改进实现现代计算机,2008:51-537管占明. 邓亚娟RSA加密算法的研究及应用. 科技广场,2009:98- 99.8胡向东,魏琴芳等应用密码学北京市:电子工业出版社,2008: 114-

12、1199卢开澄计算机密码学.北京市:清华大学出版社,2002: 73-7710史予荣软件加密技术从入门到精通,北京市:清华大学出版社2007: 74-77.7. 设计结果及验证进行加密得到公钥(113,11021)和私钥(2105,11021)加密明文123 587 114 56 18 9得到密文1453 385 7882 6329 4873 2744输入密文 解密得到先前加密的明文123 587 114 56 18 98. 软件使用说明1. 选择RSA加解密系统功能1为加密 2为解密 0为退出 输入其他错误重新输入2.输入1 进行加密过程输入需要加密的明文 3个一组 空格空开 -1结束生成密

13、文 并且返回主界面2. 输入2进行解密输入加密好的密文 -1结束输入密钥 d n解密得到加密前明文解密成功 返回主界面9.设计体会RSA课程设计中,包含了加解密的过程,刚开始对做设计的时候,觉得对于RSA的加解密只要套用公式就可以很方便地进行,实现并不是非常困难。但是在真正实现的时候还是碰到了不少的问题,在随机产生素数的时候,不同的实现方法会具有不同的复杂度,从而使得时间效率也有所不同,若直接生成素数,系统需要很长一段时间来生成,而随机生成一个数后再判断是否为素数可以减少很多时间,效率也就提高了。在加解密的时候,起初使用的是int型的整形变量,但是发现int型只有4位长度8字节,所以在计算时,

14、数字一大就会产生溢出,所以使用了数组进行了加解密。而在大素数生成时,可以生成非常大的素数,但是在加密时,因为程序效率过于低以至于一天都没有算出结果,所以在实现时使用了可进行运算和实现较大的素数而并不是大素数。随机大素数进行RSA加解密的程序还需要时间进行进一步改进。需要进一步调用大整数的加减乘除算法,素数明文密文密钥公钥都要使用数组才能加以实现,在此暂时保留这个程序,将用更充分的时间来实现。总结这次课程设计,不可否定又是一次对于自己编程能力的提升以及团队合作的加深,自己动手编程真的是一种成就感,然而在这以外,我还发现了自己会有一些突发奇想的思路,会发现和挖掘实现实验时某些过程的优化,而这些思路

15、又可以帮助自己来完成程序。这次课程设计的不足是还没有完全完成课程设计所需要的任务要求,写的程序还是略微有点简单化了,可能自己能力还是有限,在静候的时间里还需要更加的磨练才行。附录#include #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,

16、 n为公开密钥int d; /d, n为秘密密钥long clearMAXLENGTH, CiphertextMAXLENGTH,Ciphertext1MAXLENGTH;/分别用于存放加/密前的明/文和加密后的密文long DecryptionTextMAXLENGTH;/存放解密后的明文/unsigned long foo() unsigned long random = 0; srand(int)time(0); random = rand() % 300; return random;int panduan(unsigned long b) int flag=1; if(flag) f

17、or(unsigned long j=2;j=sqrt(b);j+) if(b%j=0) flag=0; /coutbbu是素数!100&p300) /coutp=p100&q300) /coutq=qt; break; if(p!=q) coutp=pendl; coutq=qendl; else goto label; return 0;int gcd(int x,int y) int t; while (y) t=x; x=y; y=t%y; return x;/以下为加密算法void Encryption()/加密算法 cout 随机生成两个较大的素数:endl ; tiqu(p,q)

18、; n = p * q;/求解 n, phi = (p - 1) * ( q - 1 );/求解 n 的欧拉函数值 cout n = n , phi = phi endl; cout 请从0, phi - 1 中选择一个与 phi =100&e=300&e!=q&e!=p) break; couteendl; float d0; for( int i = 1; ; i+) /求解乘法逆元 e * d 1 (mod phi) d0 = (float)(phi*i+1) / e; if( d0 - (int)d0 = 0 ) break; d = (int)d0; cout endl; cout

19、e = e , d = d endl; cout 公开密钥 Pk = e,n = e , n endl; cout 秘密密钥 Sk = d,n = d , n 记录私钥 endl; cout endl; cout 请3位一组输入要加密的正整数(以-1结束): endl; cout 加密前的明文为:; for( i = 0; i MAXLENGTH; i+) Ciphertexti = 1; int count; for(int j = 0; j clearj; if( clearj = -1 ) break; count = e; while(count 0) /对明文进行加密 Ciphert

20、ext =(clear) e mod n Ciphertextj = (Ciphertextj * clearj) % n;/加密算法 count- ; cout 密文为: ; size = j;/实际密文长度 for(int k=0; kj; k +) cout Ciphertextk ; cout endl ;/以下为解密算法void Decryption()/解密算法 int pp,kk; for(int i = 0; i MAXLENGTH; i+) DecryptionTexti = 1; int count; cout请输入要解密的密文(以-1结束):endl; for(int u

21、 = 0; u Ciphertext1u; if( Ciphertext1u = -1 ) break; cout输入密钥解密(d,n)ppkk; for(int j = 0; j 0) /对密文进行解密 DecryptionText =(Ciphertext) d (mod n) DecryptionTextj = (DecryptionTextj * Ciphertext1j) %kk); count- ; cout 解密后的明文为:; for( int k = 0; k size; k +) cout DecryptionTextk ; cout endl ;void main() int sign=1; int chioce=0; while(sign=1) coutendl; cout RSA加解密系统 endl; cout 由 李正熹 李鑫 共同完成 endl; cout 1.进行加密 endl; cout 2.进行解密 endl; cout 0.退出系统 endl; coutendl; cout请输入!chioce; switch(chioce) case 1: Encryption(); break; case 2: Decryption(); break; case 0: sign=0; break; default: cout输出错误重新输入endl;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1