#include #include #include #include int go(int k,char bk[16]); int Transform(int m,int k,int n); int (int a,int b); int IsPrime(int a); go(int k,char bk[16]) { int n = 0; while( k > 0) { bk[n] = k % 2; n++; k/= 2; } return k; } int Transform(int m,int k,int n) { long int r=1; char bk[16]; go(k,bk); for(int i=15; i>=0; i--) { r=(r*r)%n; if (bk[i] ==1) { r=(r*m)%n; } } return r; } int (int a,int b) { for(int i=2;i <=sqrt(a 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; } void main() { int c,e,d,m,n,z,p,q; cout << "\************简单RSA加密解密算法***********\\n\\n "; cout <<"请输入 p: "; cin>> p; while(!IsPrime(p)) { cout << "您输入的p不是素数,请重新输入: "; cin>> p; } cout << "请输入q: "; cin>> q; while(!IsPrime(q)) { cout << "您输入的q不是素数,请重新输入: "; cin>> q; } cout << "\\n由p和q求得n和ф(n) " < z=(p-1)*(q-1); cout << "n =" < while (!(e,z)) { cout << "e应该和ф(n)互素: "; cin>> e; } cout << "求得解密密钥" ; d=1; while (((e*d)%z)!=1) d++; cout << "d =" << d << endl; cout < while (m>=n||m<=0) { cout << "请重新输入明文m(0 } cout << "求得密文为:"; c=Transform(m,e,n); cout << "c =" < cout << "求得明文为:" ; m=Transform(c,d,n); cout << "m =" < }下载本文