RSA加密

本文详细介绍了如何使用C++实现RSA加密算法,包括最大公约数、最小公倍数的计算,以及公钥、私钥的生成和加密解密过程。示例代码展示了如何输入质数p和q,计算n、l,然后获取e、d,最后进行明文加密和密文解密的完整流程。
摘要由CSDN通过智能技术生成

运行截图

在这里插入图片描述

代码

#include<iostream> 
#include<cmath> 
using namespace std; 
/*这个算法使用int类型,最大值21亿。
可能出现的最大值是 n* n。
所以n要小于根号21亿,大致是45000。*/
int gcd(int a, int b) { //最大公约数
    int temp;

    //比较两个数的大小,值大的数为a,值小的数为b
    if (a < b) {
        temp = a;
        a = b;
        b = temp;
    }

    //求余
    while (b != 0) {
        temp = a % b;
        a = b;
        b = temp;
    }
    return a;
}
int lcm(int a, int b) { //最小公倍数
    return a * b / gcd(a, b);
}
int main() {
    int p, q;       //俩质数 p*q<45000
    cout << "输入p、q (p、q为质数,不支持过大)" << endl;
    cin >> p >> q;
    int n = p * q;
    int l = lcm(p - 1, q - 1);
    int e;
    cout << "输入e (e与" << l << "互质) 且 1<e<" << l << endl;
    cin >> e;
    int d;
    for (d = 1;; d++) {
        if (d * e % l == 1)
            break;
    }
    cout << endl << endl;
    cout << "{ " << e << "," << n << " }" << "为公钥" << endl;
    cout << "{ " << d << "," << n << " }" << "为私钥" << endl;
    cout << endl << endl;

    cout << "/***********加密*************/" << endl;
    long long m;
    cout << "输入明文,且明文小于" << n << endl;
    cin >> m;
    cout << endl;

    cout << "密文为" << endl;
    long long c;
    c = m % n;
    for (int i = 1; i < e; i++)
    {
        c = (c * m) % n;
    }
    cout << c << endl << endl;

    cout << "/***********解密*************/" << endl;
    cout << "密文为" << endl;
    cin >> c;
    cout << "明文为" << endl;
    m = c % n;
    for (int i = 1; i < d; i++)
    {
        m = (m * c) % n;
    }
    cout << m << endl << endl;
    return 0;
}

参考博文链接

https://blog.csdn.net/dbs1215/article/details/48953589
https://blog.csdn.net/u014044812/article/details/80866759

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值