- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- RFID技术介绍..doc
- RFID实验报告..docx
- rfid技术课程设计..doc
- RFID智能图书馆管理系统解决方案..doc
- RFID试题-2..doc
- RGB颜色对照表..doc
- Rio广告计划书..doc
- RGB色轮调色知识..docx
- Rip-2协议..doc
- RIP实验技术..doc
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
文档评论(0)