C 语言课程设计 1 一、 设计内容 RSA 加密算法 二、 设计目的 1) 通过完成具有一定难度的题目,使自己能够将课本上的理论知识和具体问题有机地结合起来,锻炼自己分析问题、解决问题的能力,提高编程能力; 2) 通过完成一些需要查阅相关资料才能做的题目,提高自己的自学习能力和创新能力。 三、 设计思路(包括所用的函数) RSA 的公钥、私钥的组成,以及加密、解密的公式可见于下表: 主函数实现求 n 的欧拉数, 由公钥求解私钥, 加密解密选择以及相应的密文明文输出。 candp 实现加密解密时的求幂取余运算, 子函数 fun 实现 e 与 t 的互素判断,以验证 e 是否符合要求 prime 实现一个素数的判断,以验证输入的数是否为素数 四、 程序代码 #include #include void main() { int candp(int a,int b,int c);//函数声明 int fun(int x,int y);//函数声明 2 int prime(int m);//函数声明 int p; int q; int e; int d; int m; int n; int t; int c; int r; printf("请输入两个素数p,q: "); scanf("%d,%d",&p,&q); for(;p>0,q>0;)//for 循环判断 p 和 q 是否同时为素数 { if(prime(p)&&prime(q)) { break; } else printf("输入有误,请重新输入:"); scanf("%d,%d",&p,&q); } 3 n=p*q; printf("计算得n 为%d\n",n); t=(p-1)*(q-1); //求n 的欧拉数 printf("计算得t 为%d\n",t); printf("请输入一个与 t 互素的数,即公钥 e: "); scanf("%d",&e); for(;e>1,e=t||fun(e,t)) { printf("e 不合要求,请重新输入: "); //e<1 或 e>t 或 e 与 t 不互素时,重新输入 scanf("%d",&e); } else break; } d=1; while(((e*d)%t)!=1) d++; //由公钥 e 求出私钥 d printf("经计算d 为%d\n",d); printf("加密请输入1\n"); //加密或解密选择 4 printf("解密请输入2\n"); scanf("%d",&r); switch(r) { case 1: printf("请输入明文m: "); //输入要加密的明文数字 scanf("%d",&m); c=candp(m,e,n); printf("密文为%d\n",c);break; case 2: printf("请输入密文c: "); //输入要解密的密文数字 scanf("%d",&c); m=candp(c,d,n); printf("明文为%d\n",m);break; } } int candp(int a,int b,int c) //数据处理函数,实现幂的取余运算 { int z; z=1; b=b+1;...