RSA的简单c++实现

#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。

猜你喜欢

转载自blog.csdn.net/u013595395/article/details/83822035