#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int p, q;
cout << "输入p、q (p、q为质数,不支持过大)" << endl;
cin >> p >> q;
int n = p * q;
int n1 = (p - 1) * (q - 1);
int e;
cout << "输入e (e与" << n1 << "互质) 且 1<e<" << n1 << endl;
cin >> e;
int d;
for (d = 1;; d++)
{
if (d * e % n1 == 1)
break;
}
cout << endl << endl;
cout << "{ " << e << "," << n << " }" << "为公钥" << endl;
cout << "{ " << d << "," << n << " }" << "为私钥" << endl;
cout << endl << endl;
int before;
cout << "输入明文,且明文小于"<<n << endl;
cin >> before;
cout << endl;
int i;
cout << "密文为" << endl;
int after;
after = before % n;
for (i = 1; i < e; i++)
{
after = (after * before) % n;
}
cout << after << endl;
cout << "明文为" << endl;
int real;
real = after % n;
for (i = 1; i < d; i++)
{
real = (real * after) % n;
}
cout << real << endl;
}
这个算法使用int类型,最大值21亿。
可能出现的最大值是 n*n。
所以n要小于根号21亿,大致是45000。