📄 rsa.cpp
字号:
#include<iostream.h>
int gcd(int m,int n);
int power(int x,int y,int n);
int rsa(int pt,int key,int & ct);
void main()
{
int i=0,t=0;
int pt=0,key=0,ct=0;
cout<<"\n输入明文:";
cin>>pt;
cout<<"\n输入密钥:";
cin>>key;
t=rsa(pt,key,ct);
while(t==-1){
cout<<"密钥非法,重新输入:";
cin>>key;
t=rsa(pt,key,ct);
}
cout<<"\n所得密文:"<<ct<<endl;
}
int rsa(int pt,int key,int & ct)
{
int e=key,d,k=0,c=0;
int p=17,q=11;
int n=p*q,m=(p-1)*(q-1);
if(e<=1||e>=m||gcd(e,m)!=1)
return -1;
else{
while((k*m+1)%e) // 计算私钥
k++;
d=(k*m+1)/e;
}
ct=power(pt,e,n)%n; // 加密
cout<<"\np=17,q=11,n=pq="<<n<<",o(n)="<<m<<endl;
cout<<"public key: { "<<e<<" , "<<n<<" }\n";
cout<<"private key:{ "<<d<<" , "<<n<<" }\n";
return 0;
}
int gcd(int m,int n)
{
int a,b,r;
if(m>n){ a=m;b=n; }
else{ a=n;b=m; }
r=b;
while(r!=0){
r=a%b;
a=b;
b=r;
}
return a;
}
int power(int x,int y,int n)
{
int s=1,t=x,u=y;
while(u){
if(u&1) s=(s*t)%n;
u=u>>1;
t=(t*t)%n;
}
return s;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -