当前位置:首页 C++ > 正文

C++ RSA加解密算法的实现

作者:野牛程序员:2023-06-20 14:59:30 C++阅读 2836

以下是一个使用C++实现RSA加密和解密算法的简单示例:

#include <iostream>
#include <cmath>

using namespace std;

// 函数用于计算最大公约数
int gcd(int a, int b) {
    if (b == 0)
        return a;
    return gcd(b, a % b);
}

// 函数用于计算模反元素
int modInverse(int a, int m) {
    a = a % m;
    for (int x = 1; x < m; x++) {
        if ((a * x) % m == 1)
            return x;
    }
    return 0;
}

// 函数用于计算幂模运算
int powerMod(int base, int exponent, int modulus) {
    if (modulus == 1)
        return 0;
    int result = 1;
    base = base % modulus;
    while (exponent > 0) {
        if (exponent % 2 == 1)
            result = (result * base) % modulus;
        exponent = exponent >> 1;
        base = (base * base) % modulus;
    }
    return result;
}

// RSA加密函数
int encrypt(int message, int e, int n) {
    return powerMod(message, e, n);
}

// RSA解密函数
int decrypt(int encryptedMessage, int d, int n) {
    return powerMod(encryptedMessage, d, n);
}

int main() {
    // 选择两个质数p和q
    int p = 13;
    int q = 17;

    // 计算n
    int n = p * q;

    // 计算欧拉函数phi(n)
    int phi = (p - 1) * (q - 1);

    // 选择公钥e,要求e与phi(n)互质
    int e = 7;

    // 计算私钥d,使得(e * d) % phi(n) = 1
    int d = modInverse(e, phi);

    // 显示公钥和私钥
    cout << "公钥: (" << e << ", " << n << ")" << endl;
    cout << "私钥: (" << d << ", " << n << ")" << endl;

    // 要加密的消息
    int message = 88;

    // 使用公钥加密消息
    int encryptedMessage = encrypt(message, e, n);

    cout << "加密后的消息: " << encryptedMessage << endl;

    // 使用私钥解密消息
    int decryptedMessage = decrypt(encryptedMessage, d, n);

    cout << "解密后的消息: " << decryptedMessage << endl;

    return 0;
}

在这个示例中,我们选择了两个质数p和q,计算了n和欧拉函数phi(n)。然后,选择了公钥e并计算了对应的私钥d。接下来,选择要加密的消息并使用公钥进行加密,然后使用私钥进行解密。最后,显示了加密和解密后的消息。

请注意,这只是一个简单的示例,用于说明RSA加密和解密的基本原理。在实际应用中,可能需要考虑更多的安全性和性能方面的问题,并采用更复杂的实现方式。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击