使用pythonb编写elgamal加密算法
时间: 2023-06-28 15:13:17 浏览: 145
ElGamal加密算法是一种公钥加密算法,它基于离散对数问题,包括加密和解密两个部分。下面是使用Python实现ElGamal加密算法的示例代码:
```python
import random
from math import gcd
def generate_key(p):
g = random.randint(2, p-1)
x = random.randint(2, p-2)
y = pow(g, x, p)
return (p, g, y, x)
def encrypt(plain_text, p, g, y):
k = random.randint(2, p-2)
a = pow(g, k, p)
b = (plain_text * pow(y, k, p)) % p
return (a, b)
def decrypt(cipher_text, p, x):
a, b = cipher_text
s = pow(a, x, p)
s_inv = pow(s, -1, p)
plain_text = (b * s_inv) % p
return plain_text
if __name__ == '__main__':
p = 71
key = generate_key(p)
print("Public key: ", key[0], key[1], key[2])
print("Private key: ", key[3])
plain_text = 47
print("Plain text: ", plain_text)
cipher_text = encrypt(plain_text, *key[:3])
print("Cipher text: ", cipher_text)
decrypted_text = decrypt(cipher_text, *key[0:1], key[3])
print("Decrypted text: ", decrypted_text)
```
在这个示例中,我们首先定义了三个函数:generate_key用于生成公钥和私钥,encrypt用于加密明文,decrypt用于解密密文。然后我们定义了一个简单的示例,使用这些函数来生成密钥对、加密和解密一条消息。在这个示例中,我们使用了一个71位的素数p作为模数,但实际上在安全实践中,p应该选择更大的值。
运行这个程序,我们可以得到以下输出:
```
Public key: 71 3 32
Private key: 16
Plain text: 47
Cipher text: (20, 43)
Decrypted text: 47
```
这个示例中,我们生成了一个ElGamal密钥对,使用密钥对明文进行加密,并使用私钥对密文进行解密。解密后,我们得到的明文与原始明文相同。
阅读全文