📄 rsa加密解密算法.cpp
字号:
//rsa算法的加密程序
//学号:2004182534
//姓名:唐淑娟
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int Transform(int m,int k,int n); //转换程序
int IsRelativelyPrime(int a,int b); //判相关素数
int IsPrime(int a);//判素数
void main()
{
int X,Y,e,d,n,En,p,q;
cout<<"\t *****RSA 加密、解密码的简单实现*****\n\n";
cout<<"请输入一个较大的素数 p: ";
cin>>p;
while(!IsPrime(p))
{
cout<<"Error! p 应该是一个素数: ";
cin>>p;
}
cout<<"请输入另一个素数(该素数应该与P相差较大) q: ";
cin>>q;
while(!IsPrime(q))
{
cout<<"Error! q 应该是一个素数: ";
cin>>q;
}
cout<<"\n计算得p与q的乘积 n 和 根据欧几里德算法计算解密码密钥 ф(n):"<<endl;
n=p*q;
En=(p-1)*(q-1);
cout<<"n = "<<n<<" 和 "<<"ф(n) = "<<En<<endl;
cout<<endl<<"请输入加密密钥 e: ";
cin>>e;
while (!IsRelativelyPrime(e,En))
{
cout<<"e 应该是一个与 n相关的素数 : ";
cin>>e;
}
cout<<"解密密钥 d"<<endl;
d=1;
while (((e*d)%En)!=1) d++;
cout<< "d = " << d << endl;
cout<<endl<<"请输入明文 X:"<<endl;
cin>>X;
while (X>=n||X<=0)
{
cout<< "\aX 应该是0到n之间 "<<n<<" : ";
cin>>X;
}
Y=Transform(X,e,n);
cout<<"加密得到的密文: Y = "<<Y<<endl;
cout<<"解密得到的明文: "<<endl;
X=Transform(Y,d,n);
cout<<"X = "<<X<<endl;
cout<<"\n按任意键盘退出该系统,ByBy......"<<endl;
getch();
}
int Transform(int m,int k,int n)
{
long int r=1;
char bk[16];
itoa(k,bk,2);
for (unsigned int i=0;i<strlen(bk);i++)
{
r=(r*r)%n;
if (bk[i] == '1')
{
r=(r*m)%n;
}
}
return r;
}
int IsRelativelyPrime(int a,int b)
{
for(int i=2;i<=sqrt(a<b?a:b);i++)
if ((a%i == 0)&&(b%i==0))
return 0;
return 1;
}
int IsPrime(int a)
{
for(int i=2;i<=sqrt(a);i++)
if(a%i==0) return 0;
return 1;
}
//注释:该系统只是对RSA算法的一个简单的实现,并不是一个完善的加密系统,只是实现了该算法的
//思想而已,还有很多不完善的地方,(比如:对明文的加密也只是对数字的加密,没有考虑数字也字
//母的转换等实际的情况,请老师谅解!).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -