📄 rsa 整数.cpp
字号:
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
int f11(int x)
{
for(x;x>1;x--)
{
for(int xx=2;xx<=x/2;xx++)
if(x%xx==0)
break;
if(xx>x/2)
break;
}
return x;
}
void f12(int &nn,int &e,int &d)
{
for(e;e>1;e--)
{
int x1=1,x2=0,x3=nn,y1=0,y2=1,y3=e,q,t1,t2,t3;
while(1)
{
if(y3==1||y3==0) break;
q=x3/y3;
t1=x1-q*y1;
t2=x2-q*y2;
t3=x3-q*y3;
x1=y1;x2=y2;x3=y3;
y1=t1;y2=t2;y3=t3;
}
if(y3==1&&y2>0)
{
d=y2;
break;
}
}
}
void f1()
{
int p,q,n,nn,e,d;
cout<<"输入两个大素数"<<endl;
cin>>p>>q;
p=f11(p);
q=f11(q);
cout<<"大素数 p="<<p<<" "<<"q="<<q<<endl;
n=p*q;
nn=(p-1)*(q-1);
cout<<"公共函数值="<<n<<endl;
cout<<"欧拉函数值="<<nn<<endl;
cout<<"产生密钥 输入e 0<e<"<<nn<<endl;
cin>>e;
f12(nn,e,d);
cout<<"############################################"<<endl;
cout<<"公开钥 {"<<e<<","<<n<<"}"<<endl
<<"秘密钥 {"<<d<<","<<n<<"}"<<endl;
cout<<"############################################"<<endl;
}
int f21(int aa,int x,int n)
{
int a[100],c=0;
for(int i=0;;i++)
{
a[i]=x%2;
int temp=x/2;
x=temp;
if(x==0)
break;
else
c++;
}
int bb[100];
for(int j=c;j>=0;j--)
{
bb[c-j]=a[j];
}
int cc=0,dd=1;
for(i=0;i<=c;i++)
{
cc=2*cc;
dd=(dd*dd)%n;
if(bb[i]==1)
{
cc=cc+1;
dd=(dd*aa)%n;
}
}
return dd;
}
void f2()
{
int m[6];
cout<<"请输入明文分组:"<<endl;
for(int i=0;i<6;i++)
{
cin>>m[i];
}
cout<<"请输入公共钥 e n"<<endl;
int e,n;
cin>>e>>n;
cout<<"加密后的密文为:"<<endl;
for(int j=0;j<6;j++)
{
cout<<f21(m[j],e,n)<<endl;
}
cout<<"****"<<endl;
}
void f3()
{ cout<<"%%%%"<<endl;
int g[6];
cout<<"请输入密文分组:"<<endl;
for(int i=0;i<6;i++)
{
cin>>g[i];
}
cout<<"请输入私密钥 d n"<<endl;
int d,n;
cin>>d>>n;
cout<<"解密后的明文为:"<<endl;
for(int j=0;j<6;j++)
cout<<f21(g[j],d,n)<<endl;
cout<<endl;
}
void main()
{
while(1)
{
cout<<"*************************************************"<<endl;
cout<<"选择"<<endl
<<"1 产生密钥"<<endl
<<"2 加密"<<endl
<<"3 解密"<<endl
<<"4 退出"<<endl
<<"*************************************************"<<endl;
int i;
cout<<"输入"<<endl;
cin>>i;
switch(i)
{
case 1:f1();break;
case 2:f2();break;
case 3:f3();break;
}
if(i==4)
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -