RSA简单加密的C语言实现
- 格式:docx
- 大小:13.64 KB
- 文档页数:3
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
void sushu();
int zhaoe(int p,int q);
void main()
{
srand((unsigned int)time(NULL));
int p,q,N,e,d,a,b=1,i,k;
long int a1=1;
printf("--欢迎使用简单RSA加密软件!\n");
printf("--请先选择两个不同的数作为加密密钥(中间有空格隔开):");
sushu();
printf("--请输入:");
scanf("%d %d",&p,&q);
N=p*q;
printf("--现在,请输入要加密的消息a:(0<a<%d)\n",N-1);
printf("--a=");
e=zhaoe(p,q);
scanf("%d",&a);
for(k=2;;k++)
{
if((k*(p-1)*(q-1)+1)%e==0)
{
d=(k*(p-1)*(q-1)+1)/e;
break;
}
}
for(i=1;i<=e;i++)
{
b=b*a;
b=b%N;
}
for(i=1;i<=d;i++)
{
a1=a1*b;
a1=a1%N;
}
printf("\n");
printf("--加密后的消息为:b=%d\n",b);
printf("--解密后的消息为:a1=%d\n",a1);
printf("--密钥为e=%d,N=p*q=%d*%d=%d\n",e,p,q,p*q);
printf("--解钥为d=%d\n",d);
}
void sushu()
{
int i,j,k,l,a[45],m=0;
for(i=2;i<=200;i++)
{
j=sqrt(i);
for(k=2;k<=j;k++)
{
l=i%k;
if(l==0)
break;
if(k>=j)
{
a[m]=i;
m++;
break;
}
}
}
printf("\n");
for(i=1;i<=43;i++)
{
printf("%-3d ",a[i-1]);
if(i%5==0)
printf("\n");
}
printf("\n");
}
int zhaoe(int p,int q)
{
srand((unsigned int)time(NULL));
int a[200]={0},i,m=0,b,N,j,k,t,n;
N=(p-1)*(q-1);
for(i=1;i<=N;i++)
{ k=N;
j=i;
while(t=k%j)
{
k = j;
j = t;
}
if(j == 1)
{
a[m]=i;
m++;
}
else
if(m==200)
break;
}
n=rand()%200;
b=a[n];
return b;
}。