用python 写一个rsa算法代码
时间: 2023-12-17 19:18:27 浏览: 90
以下是 Python 实现的 RSA 加密算法代码示例:
```python
import random
import math
# 生成指定长度的质数
def generate_prime_number(length):
while True:
p = random.randint(2**(length-1), 2**length-1)
if is_prime(p):
return p
# 判断一个数是否为质数
def is_prime(n):
if n == 2 or n == 3:
return True
if n < 2 or n % 2 == 0:
return False
for i in range(3, int(math.sqrt(n))+1, 2):
if n % i == 0:
return False
return True
# 求解最大公约数
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
# 扩展欧几里得算法求解模反元素
def extended_gcd(a, b):
if b == 0:
return a, 1, 0
else:
d, x, y = extended_gcd(b, a % b)
return d, y, x - (a // b) * y
# 生成 RSA 密钥对
def generate_rsa_key(length):
p = generate_prime_number(length // 2)
q = generate_prime_number(length // 2)
n = p * q
phi = (p - 1) * (q - 1)
e = 65537
d = extended_gcd(e, phi)[1]
d = d % phi
return ((e, n), (d, n))
# RSA 加密
def rsa_encrypt(m, public_key):
e, n = public_key
c = pow(m, e, n)
return c
# RSA 解密
def rsa_decrypt(c, private_key):
d, n = private_key
m = pow(c, d, n)
return m
```
使用示例:
```python
# 生成 RSA 密钥对
public_key, private_key = generate_rsa_key(2048)
# 加密消息
message = 123456789
ciphertext = rsa_encrypt(message, public_key)
# 解密消息
plaintext = rsa_decrypt(ciphertext, private_key)
print("明文:", message)
print("密文:", ciphertext)
print("解密结果:", plaintext)
```
注意:这只是一个简单的示例,实际应用中还需要考虑一些安全性问题,例如使用更长的密钥长度、使用 padding 等。
阅读全文