信息安全论文——RSA加密算法介绍及实现_第1页
信息安全论文——RSA加密算法介绍及实现_第2页
信息安全论文——RSA加密算法介绍及实现_第3页
信息安全论文——RSA加密算法介绍及实现_第4页
信息安全论文——RSA加密算法介绍及实现_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XXXXX信息安全xx论文RSA加密算法实现xxxx xxxx学号:xxxxxxxxxx RSA加密算法介绍及实现一、 实验原理RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和Len Adleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod(p-1)*(q-1)=1。 (n及e1),(n及e2)就是密钥对。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=Be1 mod n;B=Ae2 mod n;e1和e2可以互换使用,即:A=Be2 mod n;B=Ae1 mod n。二、 RSA 的安全性RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n 必须选大一些,因具体适用情况而定。三、 本程序实现的功能本程序的功能比较简单,基于C+语言实现RSA的算法,实现英文字母的加密以及解密。四、 程序代码/*RSA algorithm */#include #include #include #define MM 7081#define KK 1789#define PHIM 6912#define PP 85typedef char strtype10000;int len;long nume10000;int change126;char antichange37;void initialize() int i; char c; for (i = 11, c = A; c = Z; c +, i +) changec = i; antichangei = c; void changetonum(strtype str) int l = strlen(str), i; len = 0; memset(nume, 0, sizeof(nume); for (i = 0; i l; i +) numelen = numelen * 100 + changestri; if (i % 2 = 1) len +; if (i % 2 != 0) len +; long binamod(long numb, long k) if (k = 0) return 1; long curr = binamod (numb, k / 2); if (k % 2 = 0) return curr * curr % MM; else return (curr * curr) % MM * numb % MM; long encode(long numb) return binamod(numb, KK); long decode(long numb) return binamod(numb, PP); main() strtype str; int i, a1, a2; long curr; initialize(); puts(Input Y if encoding, otherwise input N:); gets(str); if (str0 = Y) gets(str); changetonum(str); printf(encoded: ); for (i = 0; i len; i +) if (i) putchar(-); printf( %ld , encode(numei); putchar(n); else scanf(%d, &len); for (i = 0; i len; i +) scanf(%ld, &curr); curr = decode(curr); a1 = curr / 100; a2 = curr % 100; printf(decoded: ); if (a1 != 0) putchar(antichangea1); if (a2 != 0) putchar(antichangea2); putchar(n); putchar(n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论