网络信息安全试验报告
-RSA
加密算法的实现
姓 名:拓慧玲 学 号:20907210
专 业:09信管2班 指导老师:吕林涛
西安理工大学高科学院实验报告用纸
一、实验目的
通过本次实验,掌握RSA算法的基本思想。
使用C语言实现RSA算法,并且可以对简单数字串进行加密、解密。
二、实验原理
通过查阅资料,了解RSA算法基本思想。
首先, 找出三个数, p, q, r, 其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数。 p, q, r 这三个数便是 private key(私钥)接著, 计算 m, r*m == 1 mod (p-1)(q-1)..... 这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了..... 再来, 计算 n = pq....... m, n 这两个数便是 public key(公钥)。 编码过程是: 若明文为 a, 将其看成是一个大整数, 假设 a < n.... 如果 a >= n 的话, 就将 a 表成 s 进位 (s <= n, 通常取 s = 2^t), 则每一位数均小於 n, 然后分段编码...... 接下来, 计算 b == a^m mod n, (0 <= b < n), b 就是编码后的密文......
解码的过程是, 计算 c == b^r mod pq (0 <= c < pq),
如果第三者进行窃听时, 他会得到几个数: m, n(=pq), b。他如果要破解的话, 必须想办法得到 r。. 所以, 他必须先对 n 作质因数分解。 但是n往往是非常大的数,同时还有两个非常的大质数 p, q, 使第三者作因数分解时发生困难。对方往往很难破解出明文。
三、实验源码
#include
int getd(int p, int q,int e) {
int qn,d=1; qn=(p-1)*(q-1); while(d) {
if(d*e%qn==1) return(d); else d++; } }/*getd*/
int power(int a,int b) {
int mut=1;
while(b!=0) { mut*=a; b--; }
2
西安理工大学高科学院实验报告用纸
return mut;
}/*power*/
int jiemi(int e,int n,int p) {
int q;
q=power(p,e)%n; return q; }/*jiemi*/
int jiami(int e,int n,int p) {
int q;
q=power(p,e)%n; return q; }/*jiami*/
int main() {
int prime1,prime2,p; int d,e,n,miwen,minwen;
int getd(int p,int q,int e);
printf(\请输入两个大的素数和公钥,e和n \\n\ scanf(\ n=prime1*prime2; printf(\为%d \\n\
d=getd(prime1,prime2,e);
printf(\私有密钥是%d\\n\其中e和n为共钥,d为私钥*/ printf(\请输入要加密的数字串 \\n\ scanf(\ while(p!=0) {
miwen=jiami(e,n,p);
printf(\加密的数值是%d\
minwen = jiemi (d,n,miwen);
printf(\解密后的数值为; %d \\n\scanf(\break; } }
3
西安理工大学高科学院实验报告用纸
四、实验结果
五、实验总结
通过此次实验,我了解了公钥密码体制的基本思想,基本掌握了公钥密码体制RSA。在此次实验中,我又复习了许多以前的旧算法,巩固了基础知识。更加深入的了解安全算法的体制,以及如何分析一个安全算法。同时,也让我学会如何更加熟练的使用C语言进行编程。 无论编写何种软件,了解其思想和过程都是很重要的。思想就是算法,过程就是程序。 刚开始写RSA算法时,就是对RSA的思想和过程不清楚,造成了编写困难。通过在网上查阅资料,下来仔细看书。掌握了基本思想后编写相关程序就很简单了就很简单了。 在编写中,总是不注意一些小细节。例如分号,函数声明和调用,全局量与局部量等。但是随着不断修改、不断上机实验,我已经慢慢习惯于C语言式的思考---分解问题。但是在分解问题前,最好画上详细的流程图及创建相关变量。这一点我做的并不好,仍需要努力。
4
相关推荐: