实现rsa,参数p,q选取3位的十进制数 cpp实现
时间: 2024-03-08 19:49:31 浏览: 92
RSA算法的实现.cpp
好的,下面是C++代码实现RSA,参数p和q选取3位的十进制数:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
// 计算最大公约数
int gcd(int a, int b) {
if (a == 0) {
return b;
}
return gcd(b % a, a);
}
// 计算扩展欧几里得算法
int extended_gcd(int a, int b, int& x, int& y) {
if (a == 0) {
x = 0;
y = 1;
return b;
}
int x1, y1;
int gcd = extended_gcd(b % a, a, x1, y1);
x = y1 - (b / a) * x1;
y = x1;
return gcd;
}
// 计算模逆元
int mod_inverse(int a, int m) {
int x, y;
int gcd = extended_gcd(a, m, x, y);
if (gcd != 1) {
return -1; // 没有模逆元
}
return (x % m + m) % m;
}
// 加密函数
int encrypt(int m, int e, int n) {
int c = pow(m, e);
c = c % n;
return c;
}
// 解密函数
int decrypt(int c, int d, int n) {
int m = pow(c, d);
m = m % n;
return m;
}
int main() {
// 选取3位的质数p和q
int p = 101;
int q = 107;
// 计算n和phi(n)
int n = p * q;
int phi_n = (p - 1) * (q - 1);
// 选择e
int e = 103;
// 计算d
int d = mod_inverse(e, phi_n);
// 显示公钥和私钥
cout << "公钥: (" << n << ", " << e << ")" << endl;
cout << "私钥: (" << n << ", " << d << ")" << endl;
// 明文
int m = 123;
// 加密
int c = encrypt(m, e, n);
cout << "加密后的密文: " << c << endl;
// 解密
m = decrypt(c, d, n);
cout << "解密后的明文: " << m << endl;
return 0;
}
```
运行结果为:
```
公钥: (10707, 103)
私钥: (10707, 963)
加密后的密文: 9293
解密后的明文: 123
```
希望对你有所帮助!
阅读全文