Python中使用RSA算法实现安全通信的原理
发布时间:2023-12-23 05:38:15
RSA(Rivest-Shamir-Adleman)是一种常见的非对称加密算法,它利用了大数分解的困难来实现安全通信。RSA算法包括三个部分:密钥生成、加密和解密。
密钥生成:
1. 选择两个大素数p和q,并计算它们的乘积n = p * q。
2. 计算欧拉函数φ(n) = (p-1) * (q-1)。
3. 选择一个整数e,使得1 < e < φ(n),且e与φ(n)互质。
4. 计算e的模反元素d,满足(d * e) % φ(n) = 1。
5. 公钥为(n, e),私钥为(n, d)。
加密:
1. 假设Alice想要向Bob发送一条信息m。
2. Bob将Alice的公钥(n, e)和消息m一起使用公式:c = m^e mod n 进行加密。其中,c为加密后的密文。
解密:
1. Bob收到密文c后,使用私钥(n, d)对密文进行解密。具体地,Bob使用公式:m = c^d mod n 进行解密。其中,m为解密后的明文。
下面是一个使用Python实现RSA加密解密的示例代码:
import random
# 生成素数
def generate_prime_number(n):
prime_list = []
for i in range(2, n+1):
is_prime = True
for j in range(2, int(i**0.5)+1):
if i % j == 0:
is_prime = False
break
if is_prime:
prime_list.append(i)
return prime_list
# 选择两个大素数p和q
prime_list = generate_prime_number(1000)
p = random.choice(prime_list)
q = random.choice(prime_list)
# 计算n和φ(n)
n = p * q
phi_n = (p-1) * (q-1)
# 选择e
e = random.randint(2, phi_n)
# 计算e的模反元素d
d = pow(e, -1, phi_n)
# 明文加密和解密
message = 123
ciphertext = pow(message, e, n)
plaintext = pow(ciphertext, d, n)
print("公钥(n, e): ({}, {})".format(n, e))
print("私钥(n, d): ({}, {})".format(n, d))
print("密文: {}".format(ciphertext))
print("明文: {}".format(plaintext))
运行上述代码会输出生成的公钥、私钥、密文和明文。可以看到,通过使用RSA算法,我们可以利用公钥加密明文,然后使用私钥解密密文,从而实现安全通信。
