信息安全
#include<iostream> #include<cmath> using namespace std; float powfunction(int data,int e,int n) { int temp=data; for(int k=1;k<e;k++) { data=temp*data; data=data%n; } return data; } int main() { int p,q; cout<<"请输入两个较大的素数:"<<endl; cin>>p>>q; cout<<"p="<<p<<",q="<<q<<endl; int n,o; n=p*q; o=(p-1)*(q-1); cout<<"n="<<n<<",o="<<o<<endl; cout<<"请从【0,"<<o-1<<"】中选择一个与"<<o<<"互素的数e:"<<endl; int e,i; float d; cin>>e; for(i=1;;i++) //用于求出私钥中的d { d=(float)(o*i+1)/e; if(d-(int)d==0) break; } cout<<"e="<<e<<",d="<<d<<endl; cout<<"公开密钥Pk={e,n}={"<<e<<","<<n<<"}"<<endl; cout<<"秘密密钥Sk={d,n}={"<<d<<","<<n<<"}"<<endl; cout<<endl; cout<<"请输入要加密的信息(*结束,无标点):"<<endl; int m1[500],m3[500]; float m2[500]; int j; char data; for(j=0;j<500;j++) { cin>>data; m1[j]=data-(int)'a'; if(data=='*') break; m2[j]=powfunction(m1[j],e,n); //通过调用这个函数防止使用pow数学库函数产生的溢出,加密过程 } cout<<"密文为:"<<endl; int k; for(k=0;k<j;k++) cout<<m2[k]<<" "; cout<<endl; cout<<"明文为:"<<endl; for(k=0;k<j;k++) { m2[k]=powfunction(m2[k],d,n); cout<<(char)(m2[k]+(int)'a')<<" "; } return 0; }
实验结果: