#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>
int gcd(int ,int );
int gen_d(int ,int );
int max_power(int ,int ,int );
int main() {
char pl[100];
int c[100],cipher[100],k[100];
int phi,l,n,e,d,i,p,q;
printf("\nEnter two large prime no p & q=");
scanf("%d %d",&p,&q);
n=p*q;
phi=(p-1)*(q-1);
for (i = 1; i <= phi; i++) {
e = rand() % phi + 1;
if (gcd(phi,e)==1)
{
printf("public key(e,n)=(%d,%d)", e,n);
break;
}
}
d=gen_d(phi,e);
printf("\nprivate key(d,n)=(%d,%d)",d,n);
printf("\nenter the plaintext=");
scanf("%s",pl);
l=strlen(pl);
for(i=0;i<l;i++){c[i]=pl[i];}
printf("\nEncryption=>>cipher is ::");
for(i=0;i<l;i++)
{
k[i]=max_power(c[i],e,n);
printf("%c",toascii(k[i]));
}
int j=0;
printf("\nDecryption=>>plain text is::");
for(i=0;i<l;i++)
{
j=max_power(k[i],d,n);
printf("%c",toascii(j));
}
getch();
return 0;
}
int gcd(int x,int y)
{
int r1=x;
int r2=y,q,r;
while(r2>0)
{
q=r1/r2;
r=r1-q*r2;
r1=r2;
r2=r;
}
return(r1);
}
int gen_d(int x1,int y1)
{
int r1=x1,r2=y1,t1=0,t2=1,r,q,t;
while(r2>0)
{
q=r1/r2;
r=r1-q*r2;
r1=r2;
r2=r;
t=t1-q*t2;
t1=t2;
t2=t;
}
return t1;
}
int max_power(int base,int exp,int mod)
{
if (exp == 0)
return 1;
else if (exp%2 == 0) {
int mysqrt = max_power(base, exp/2, mod);
return (mysqrt*mysqrt)%mod;
}
else
return (base*max_power(base, exp-1, mod))%mod;
}
RSA.rar_c++ builder RSA_generation_rsa_rsa c++
版权申诉
106 浏览量
2022-09-23
18:00:39
上传
评论
收藏 6KB RAR 举报
weixin_42651887
- 粉丝: 79
- 资源: 1万+