C语言课程设计(RSA加密算法)报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言课程设计
一、设计内容
RSA加密算法
二、设计目的
1)通过完成具有一定难度的题目,使自己能够将课本上的理论知识和
具体问题有机地结合起来,锻炼自己分析问题、解决问题的能力,
提高编程能力;
2)通过完成一些需要查阅相关资料才能做的题目,提高自己的自学习
能力和创新能力。

三、设计思路(包括所用的函数)
RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:
主函数实现求n的欧拉数, 由公钥求解私钥, 加密解密选择以及相应的密文明文输出。

candp 实现加密解密时的求幂取余运算,
子函数fun 实现e 与t 的互素判断,以验证e 是否符合要求
prime实现一个素数的判断,以验证输入的数是否为素数四、程序代码
#include <stdio.h>
#include <math.h>
void main()
{
int candp(int a,int b,int c);//函数声明
int fun(int x,int y);//函数声明
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);
}
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;)
{
if(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"); //加密或解密选择
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;
while(b!=1)
{
z=z*a;
z=z%c;
b--;
}
printf("%d\n",z);
return z;
}
int fun(int x,int y) //公钥e 与t 的互素判断{
int s;
while(y)
{
s=x;
x=y;
y=s%y;
}
if(x == 1)
return 0; //x 与y 互素时返回0 else
return 1; //x 与y 不互素时返回1
}
int prime(int m)//判断一个数是否为素数{
int i;
int n;
if(m==1)
return 0;
n=(int)sqrt(m);
for(i=2;i<=n;i++)
if(m%i==0)
return 0;
else
return 1;
}
五、运行结果
当P=43, q=59 时,对134 进行加密,运行结果如下:
六、分析与讨论
从对RSA算法的一无所知到现在运行处的结果,中间经过查询各种资料,我们的努力还是有收获的,运行结果基本上还令人满意。

总的来说,这次的课程设计锻炼了我们分析问题、解决问题的能力,有助于提高自己的自学习能力和创新能力。

相关文档
最新文档