C++写一套RSA加密代码
时间: 2023-07-10 15:18:03 浏览: 86
java调用c++封装库,实现rsa加解密,jni调用,实现c/s端双向加解密
以下是一个简单的C++实现RSA加密的示例代码,包括生成公钥和私钥、加密和解密操作:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
// 判断一个数是否为素数
bool is_prime(int n) {
if (n < 2) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
// 生成指定范围内的随机素数
int get_prime(int min, int max) {
int p;
do {
p = rand() % (max - min + 1) + min;
} while (!is_prime(p));
return p;
}
// 扩展欧几里得算法
int exgcd(int a, int b, int &x, int &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
int d = exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
}
// 计算模反元素
int mod_inverse(int a, int m) {
int x, y;
int d = exgcd(a, m, x, y);
if (d != 1) return -1; // 不存在模反元素
return (x % m + m) % m;
}
// 生成RSA公钥和私钥
void generate_rsa_key(int &n, int &e, int &d) {
int p = get_prime(100, 500); // 生成素数p
int q = get_prime(100, 500); // 生成素数q
n = p * q; // 计算n
int fn = (p - 1) * (q - 1); // 计算欧拉函数值
e = 65537; // 选择一个较大的素数e
d = mod_inverse(e, fn); // 计算d
}
// RSA加密
int rsa_encrypt(int m, int e, int n) {
return (int)pow(m, e) % n;
}
// RSA解密
int rsa_decrypt(int c, int d, int n) {
return (int)pow(c, d) % n;
}
int main() {
srand((unsigned)time(NULL));
int n, e, d;
generate_rsa_key(n, e, d);
int m = 123; // 明文
int c = rsa_encrypt(m, e, n); // 加密
int m2 = rsa_decrypt(c, d, n); // 解密
cout << "明文:" << m << endl;
cout << "密文:" << c << endl;
cout << "解密后的明文:" << m2 << endl;
return 0;
}
```
需要注意的是,这个示例代码仅用于演示RSA算法原理,实际中应该使用更加安全和高效的RSA实现库。
阅读全文