用C++实现ElGamal加密算法
时间: 2023-07-11 13:09:05 浏览: 183
ElGamal加密算法是一种公钥密码体制,基于离散对数问题,具有保密性、完整性和不可否认性等特点。下面是用C++实现ElGamal加密算法的示例代码:
```c++
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
// 定义大素数p和原根g
const int p = 23;
const int g = 5;
// 生成[1, p-2]之间的随机数
int generateRandomNum() {
return rand() % (p - 2) + 1;
}
// 求模幂运算b^e mod m
int modPower(int b, int e, int m) {
int result = 1;
while (e) {
if (e & 1) {
result = (result * b) % m;
}
e >>= 1;
b = (b * b) % m;
}
return result;
}
// ElGamal加密
void ElGamalEncrypt(int plaintext, int& c1, int& c2, int y) {
int k = generateRandomNum();
c1 = modPower(g, k, p);
c2 = (plaintext * modPower(y, k, p)) % p;
}
// ElGamal解密
int ElGamalDecrypt(int c1, int c2, int x) {
int k = modPower(c1, x, p);
int plaintext = (c2 * k) % p;
return plaintext;
}
int main() {
// 初始化随机数种子
srand(time(NULL));
// 选择私钥x和计算公钥y
int x = generateRandomNum();
int y = modPower(g, x, p);
// 明文和密钥
int plaintext, c1, c2;
// 输入明文
cout << "请输入明文:";
cin >> plaintext;
// 加密
ElGamalEncrypt(plaintext, c1, c2, y);
// 输出密文
cout << "密文为:(" << c1 << ", " << c2 << ")" << endl;
// 解密
int decrypted = ElGamalDecrypt(c1, c2, x);
// 输出解密结果
cout << "解密结果为:" << decrypted << endl;
return 0;
}
```
这里使用了C++的标准库,包括iostream、cmath和cstdlib。实现ElGamal加密算法的关键是生成随机数、模幂运算和加密解密过程,这些函数都定义在代码中。在主函数中,用户输入明文,程序使用私钥x和公钥y对明文进行加密,输出密文,并使用私钥x对密文进行解密,输出解密结果。
阅读全文