rss
    0

    C++rsa加密算法代码

    2024.12.29 | admin | 2次围观

    以下是一个简单的示例代码,演示了如何使用C++实现RSA加密算法:

    #include <iostream>
    #include <cmath>
    #include <vector>
    
    using namespace std;
    
    // 求最大公约数
    int gcd(int a, int b) {
        if (b == 0)
            return a;
        else
            return gcd(b, a % b);
    }
    
    // 判断是否为素数
    bool isPrime(int n) {
        if (n <= 1)
            return false;
    
        int sqrtN = sqrt(n);
        for (int i = 2; i <= sqrtN; i++) {
            if (n % i == 0)
                return false;
        }
    
        return true;
    }
    
    // 生成RSA公钥和私钥
    void generateRSAKeys(int p, int q, int& publicKey, int& privateKey) {
        // 检查输入的两个数是否为素数
        if (!isPrime(p) || !isPrime(q)) {
            cout << "p和q必须是素数" << endl;
            return;
        }
    
        // 计算n和phi(n)
        int n = p * q;
        int phiN = (p - 1) * (q - 1);
    
        // 选择公钥e(1 < e < phiN):e与phiN互质
        for (int e = 2; e < phiN; e++) {
            if (gcd(e, phiN) == 1) {
                publicKey = e;
                break;
            }
        }
    
        // 计算私钥d:(d * e) mod phiN = 1
        int d;
        for (d = 2; d < phiN; d++) {
            if ((d * publicKey) % phiN == 1) {
                privateKey = d;
                break;
            }
        }
    }
    
    // 加密
    int encrypt(int plaintext, int publicKey, int n) {
        int ciphertext = pow(plaintext, publicKey);
        ciphertext = fmod(ciphertext, n);
        return ciphertext;
    }
    
    // 解密
    int decrypt(int ciphertext, int privateKey, int n) {
        int plaintext = pow(ciphertext, privateKey);
        plaintext = fmod(plaintext, n);
        return plaintext;
    }
    
    int main() {
        int p, q; // 两个素数
        int publicKey, privateKey; // 公钥和私钥
        int plaintext; // 明文
        int ciphertext; // 密文
    
        // 输入素数p和q
        cout << "输入两个素数p和q:" << endl;
        cin >> p >> q;
    
        // 生成RSA公钥和私钥
        generateRSAKeys(p, q, publicKey, privateKey);
    
        // 输出公钥和私钥
        cout << "公钥为:" << publicKey << endl;
        cout << "私钥为:" << privateKey << endl;
    
        // 输入明文
        cout << "输入要加密的明文:" << endl;
        cin >> plaintext;
    
        // 加密
        ciphertext = encrypt(plaintext, publicKey, p * q);
        cout << "加密后的密文为:" << ciphertext << endl;
    
        // 解密
        plaintext = decrypt(ciphertext, privateKey, p * q);
        cout << "解密后的明文为:" << plaintext << endl;
    
        return 0;
    }

    请注意,这只是一个简单的示例,用于演示RSA加密算法的基本原理。在实际应用中,需要考虑更多的安全性和性能方面的细节。此外,还应该处理更大的整数,以便支持更安全的密钥长度。在实际使用中,建议使用经过验证和已经实现的加密库来执行RSA加密操作。