C++实现RSA加密解密算法是示例代码
更新时间:2023-08-09前言
RSA是一种非对称加密算法,广泛应用于信息安全领域。它能够保护数据的机密性和完整性,同时还能实现数字签名和密钥交换的功能。下面是一个C++实现的RSA加密解密算法的示例代码。
示例代码
#include#include using namespace std; // 判断一个数是否为质数 bool isPrime(int num) { if (num <= 1) { return false; } int sqrtNum = sqrt(num); for (int i = 2; i <= sqrtNum; i++) { if (num % i == 0) { return false; } } return true; } // 求两个数的最大公约数 int gcd(int a, int b) { if (a == 0) { return b; } return gcd(b % a, a); } // 求模逆元 int modInverse(int a, int m) { int m0 = m, x = 0, y = 1; if (m == 1) { return 0; } while (a > 1) { int q = a / m; int t = m; m = a % m, a = t; t = x; x = y - q * x; y = t; } if (y < 0) { y += m0; } return y; } // 生成RSA密钥对 void generateRSAKeys(int p, int q, int& n, int& e, int& d) { if (!isPrime(p) || !isPrime(q)) { cout << "p和q必须是质数" << endl; return; } if (p == q) { cout << "p和q不能相等" << endl; return; } n = p * q; int phi = (p - 1) * (q - 1); for (e = 2; e < phi; e++) { if (gcd(e, phi) == 1) { break; } } d = modInverse(e, phi); } // RSA加密 int encrypt(int plaintext, int e, int n) { int ciphertext = 1; for (int i = 0; i < e; i++) { ciphertext = (ciphertext * plaintext) % n; } return ciphertext; } // RSA解密 int decrypt(int ciphertext, int d, int n) { int plaintext = 1; for (int i = 0; i < d; i++) { plaintext = (plaintext * ciphertext) % n; } return plaintext; } int main() { int p, q, n, e, d; p = 61; q = 53; generateRSAKeys(p, q, n, e, d); int plaintext = 123; int ciphertext = encrypt(plaintext, e, n); int decryptedPlaintext = decrypt(ciphertext, d, n); cout << "明文:" << plaintext << endl; cout << "密文:" << ciphertext << endl; cout << "解密后的明文:" << decryptedPlaintext << endl; return 0; }
代码解释
以上示例代码实现了RSA加密解密算法。代码中定义了一些辅助函数和主要函数:
isPrime
函数用于判断一个数是否为质数,通过遍历2到该数的平方根的方式进行判断。gcd
函数用于求两个数的最大公约数,使用辗转相除法递归实现。modInverse
函数用于求模逆元,即对于给定的数a
和m
,求出满足(a * x) % m = 1
的x
值。generateRSAKeys
函数用于生成RSA密钥对。输入两个质数p
和q
,输出模数n
、公钥e
和私钥d
。encrypt
函数用于RSA加密。输入明文plaintext
、公钥e
和模数n
,输出密文ciphertext
。decrypt
函数用于RSA解密。输入密文ciphertext
、私钥d
和模数n
,输出解密后的明文plaintext
。
总结
RSA是一种非对称加密算法,通过生成一对密钥(公钥和私钥)来实现加密和解密的过程。以上示例代码实现了RSA加密解密算法,并通过给定的质数 p
和 q
生成了密钥对。在示例代码中,采用了模幂运算来加密和解密数据。
通过使用RSA加密解密算法,可以确保数据的保密性,即使密钥泄露也无法破解密文。同时,RSA还具备了数字签名和密钥交换的功能,为信息安全提供了重要的保障。
注意:在实际使用中,为了保证安全性,通常需要使用更大的质数和更复杂的算法参数。此处的示例代码仅用于演示RSA算法的基本原理和实现方法。