请大侠帮忙:RSA加密算法
代码如下:(运行的结果不对,不知错在哪里。请大侠指点,不胜感激)#include <stdio.h>
int encryption(int m,int e,int n) /*加密方法*/
{
long int M=1;
long int result_1=1; /*用来存储加密后的数据*/
int i;
for(i=1;i<=e;i++)
M=M*m; /*计算m 的 e 次方*/
/* (c-M)%n==0; */
while((result_1%n)!=M)
result_1++;
return result_1;
}
int decryption(int c,int d,int n) /*解密方法*/
{
long int M=1;
int result_2=1; /*存储解密后的数据*/
int i;
for(i=1;i<=d;i++)
M=M*c; /*计算 c 的 d 次方*/
while(result_2%n!=M) /*计算 result ,满足 result==c^d(mod n)*/
result_2++;
return result_2;
}
void main()
{
/*int p,q,e,d,m,n,t,c,r; */
int p,q; /*两个质数 p 与 q*/
int e,d;/*加密密钥 和 解密密钥*/
int n; /*存储 q 与 q 的 乘积*/
int t; /*存储 (q-1)与 (p-1)的 乘积 */
int m;/*消息数*/
int r; /*变量*/
int c; /*存储运算的结果*/
int s;
printf("please input the p,q: "); /*输入两个质数*/
scanf("%d%d",&p,&q);
n=p*q;
printf("the n is %3d\n",n); /*打印输出n*/
t=(p-1)*(q-1);
printf("the t is %3d\n",t); /*打印输出 t*/
printf("please input the e: ");
scanf("%d",&e); /*输入解密密钥 e,e与t 互质。最大公约数为 1*/
while(e<1||e>t) /*判断解密密钥是否正确*/
{
printf("e is error,please input again (e<1||e>t): ");
scanf("%d",&e);
}
d=1;
while(((e*d)%t)!=1)
d++;
printf("then caculate out that the d is %d\n",d);
printf("input the m: "); /*输入要加密的明文数字*/
scanf("%d",&m);
c=encryption(m,e,n);
printf("the cipher is %d\n",c);
printf("input the c: "); /*输入要解密的密文数字*/
scanf("%d",&c);
s=decryption(c,d,n);
printf("the cipher is %d\n",s);
getch();
}