📄 rsa.cpp
字号:
#include <iostream.h>
#include <math.h>
#include "isprime.cpp"
#include "gcd.cpp"
void main()
{
//---------------输入两个大素数p,q----------------------
unsigned long p,q; //p,q分别为两个大素数,密钥
unsigned long r; //密钥
unsigned long m,n; //公钥
unsigned long a; //明文
unsigned long b;//密文
unsigned long c;//解密后的内容
unsigned long i;//循环变量
cout<<"请输入两个大素数(p,q):";
cin>>p>>q;
while((!isPrime(p))||(!isPrime(q)))
{
cout<<isPrime(p)<<isPrime(q);
cout<<"p和q不符合都是素数的要求"<<endl;
cout<<"请输入两个大素数(p,q):";
cin>>p>>q;
}
cout<<"您输入的素数p="<<p<<endl<<"q="<<q<<endl;
//-----------------输入素数r-----------------
cout<<"请输入素数r:";
cin>>r;
cout<<endl;
while(r<1||r>(p-1)*(q-1)||gcd(r,(p-1)*(q-1))!=1)
{
cout<<"您输入的素数r不符合要求,请重新输入"<<endl;
cout<<"请重新输入素数r:";
cin>>r;
}
//------------求解密钥过程----------
m=1;
while((r*m-1)%((p-1)*(q-1))!=0)
m++;
n=p*q;
cout<<"密钥m="<<m<<",n="<<n;
//------------加密过程------------
cout<<"请输入明文a=";
cin>>a;
cout<<"您输入的明文为:"<<a<<endl;
b=1;
for(i=0;i<m;i++)
b=(unsigned long)(a*b);
b=b%n;
cout<<"加密后的密文为b="<<b<<endl;
//--------------解密过程----------
c=1;
for(i=0;i<r;i++)
c=(unsigned long)(c*b);
c=c%(p*q);
cout<<"解密后的内容为c="<<c;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -