rsa密码python
时间: 2023-08-31 10:09:22 浏览: 91
以下是用Python实现RSA密码的示例代码:
```python
import random
import math
def generate_key(p, q):
# 计算n和欧拉函数φ(n)
n = p * q
phi_n = (p - 1) * (q - 1)
# 随机选择一个整数e,且1 < e < φ(n),且e与φ(n)互质
e = random.randrange(1, phi_n)
gcd = math.gcd(e, phi_n)
while gcd != 1:
e = random.randrange(1, phi_n)
gcd = math.gcd(e, phi_n)
# 计算e的模反元素d
d = mod_inverse(e, phi_n)
# 返回公钥和私钥
return (e, n), (d, n)
def mod_inverse(a, m):
# 扩展欧几里得算法求a在模m下的逆元素
g, x, y = egcd(a, m)
if g != 1:
raise ValueError('modular inverse does not exist')
return x % m
def egcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, y, x = egcd(b % a, a)
return (g, x - (b // a) * y, y)
def encrypt(plaintext, public_key):
# 加密明文
e, n = public_key
ciphertext = [pow(ord(char), e, n) for char in plaintext]
return ciphertext
def decrypt(ciphertext, private_key):
# 解密密文
d, n = private_key
plaintext = ''.join([chr(pow(char, d, n)) for char in ciphertext])
return plaintext
# 示例使用
p = 61
q = 53
public_key, private_key = generate_key(p, q)
print('公钥:', public_key)
print('私钥:', private_key)
plaintext = 'Hello, RSA!'
ciphertext = encrypt(plaintext, public_key)
print('密文:', ciphertext)
decrypted_text = decrypt(ciphertext, private_key)
print('解密结果:', decrypted_text)
```
在示例中,我们首先使用`generate_key`函数生成RSA加密的公钥和私钥。然后,我们使用`encrypt`函数将明文加密为密文,使用`decrypt`函数将密文解密为明文。在示例中,我们将字符串'Hello, RSA!'作为明文进行加密和解密。
阅读全文