RSA C语言实现
2019-10-04 本文已影响0人
porridgechen890
#include <iostream>
using namespace std;
//判断互质,返回值为1则互质
int mgcd(int a,int b)
{
int t;
if(a<b)
{
t=a;a=b;b=t;
}
while(a%b)
{
t=b;
b=a%b;
a=t;
}
return b;
}
//加密和解密
int jiami(int m, int e, int n)
{
int r = 1;
e = e + 1;
while (e != 1)
{
r = r * m;
r = r % n;
e--;
}
return r;
}
int main(int argc, const char * argv[]) {
int p,q;
cout << "input p:";
cin >> p;
cout << "input q:";
cin >> q;
while (mgcd(p, q) != 1){
cout << "input p:";
cin >> p;
cout << "input q:";
cin >> q;
};
//n
int n = p * q;
cout << "(1) n = " << n << endl;
//l
int l = (p - 1) * (q - 1);
cout << "(2) l = " << l << endl;
//e
int e = 0;
for (int i = 2; i < l; i++)
{
if (1 == mgcd(l, i))
{
e = i;
break;
}
}
cout << "(3) e = " << e << endl;
//d
int d = 1;
while (((e * d) % l) != 1){
d++;
};
cout << "(4) d = " << d << endl;
//public(e,n) private(d,n)
int m = 0;
cout << "input MingWen(m,MingWen < n):";
cin >> m;
while (m >= n)
{
cout << "input MingWen(m,MingWen < n):";
cin >> m;
};
int miwen = jiami(m, e, n);
cout << "mi wen:" << miwen << endl;
int mingwen = jiami(miwen, d, n);
cout << "ming wen:" << mingwen << endl;
return 0;
}