python代码实现RSA,参数p、q由键盘输入,并进行注释
时间: 2024-01-07 21:06:02 浏览: 88
以下是Python代码实现RSA算法,其中p、q由键盘输入,代码中有注释说明各部分的功能:
```python
import random
# 判断一个数是否为素数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
# 生成指定长度的素数
def generate_prime(length):
while True:
p = random.randint(10 ** (length - 1), 10 ** length - 1)
if is_prime(p):
return p
# 扩展欧几里得算法求逆元
def exgcd(a, b):
if b == 0:
return 1, 0, a
else:
x, y, gcd = exgcd(b, a % b)
x, y = y, (x - a // b * y)
return x, y, gcd
# 生成公钥和私钥
def generate_keypair(p, q):
n = p * q
phi_n = (p - 1) * (q - 1)
while True:
e = random.randint(2, phi_n - 1)
x, y, gcd = exgcd(e, phi_n)
if gcd == 1:
break
d = x % phi_n
return (e, n), (d, n)
# 加密
def encrypt(message, public_key):
e, n = public_key
cipher = pow(message, e, n)
return cipher
# 解密
def decrypt(cipher, private_key):
d, n = private_key
message = pow(cipher, d, n)
return message
if __name__ == '__main__':
# 从键盘输入两个素数p、q,生成公钥和私钥
p = int(input("请输入一个素数p:"))
q = int(input("请输入一个素数q:"))
public_key, private_key = generate_keypair(p, q)
# 输入明文并加密
message = int(input("请输入要加密的明文:"))
cipher = encrypt(message, public_key)
print("加密后的密文为:", cipher)
# 解密密文
decrypted_message = decrypt(cipher, private_key)
print("解密后的明文为:", decrypted_message)
```
注:此代码只是RSA的基本实现,实际应用中还需要考虑很多细节问题,如如何保护私钥安全、如何处理长文本、如何防范攻击等。
阅读全文