Python中RSA算法实现数据加密和解密步骤详解
发布时间:2023-12-24 10:01:12
RSA算法是一种非对称加密算法,用于实现数据的加密和解密。下面我们将详细介绍RSA算法的实现步骤,并提供一个使用例子。
1. 选择两个质数p和q,并计算出它们的乘积n。
2. 计算n的欧拉函数φ(n) = (p-1)(q-1)。
3. 选择一个与φ(n)互质的整数e,作为加密指数。
4. 计算与e关于φ(n)的乘法逆元d,即满足ed≡1 (mod φ(n))的整数d,作为解密指数。
5. 将公钥公开,包括n和e;将私钥保密,包括n和d。
6. 加密:将待加密的数据m转换为整数,然后使用公钥(n, e)进行加密,得到加密后的数据c = m^e (mod n)。
7. 解密:使用私钥(n, d)对加密后的数据c进行解密,得到解密后的数据m = c^d (mod n)。
下面是一个使用RSA算法进行数据加密和解密的例子:
import random
import math
# 生成大素数
def generate_prime_number(min_value, max_value):
prime_number = 0
while True:
prime_number = random.randint(min_value, max_value)
if is_prime_number(prime_number):
break
return prime_number
# 判断是否为素数
def is_prime_number(number):
if number < 2:
return False
for i in range(2, int(math.sqrt(number)) + 1):
if number % i == 0:
return False
return True
# 计算乘法逆元
def multiplicative_inverse(e, phi_n):
d = 0
while (e * d) % phi_n != 1:
d += 1
return d
# 加密函数
def encrypt(data, public_key):
n, e = public_key
return pow(data, e, n)
# 解密函数
def decrypt(data, private_key):
n, d = private_key
return pow(data, d, n)
# 主函数
def main():
# 选择两个质数p和q
p = generate_prime_number(100, 1000)
q = generate_prime_number(100, 1000)
# 计算n和phi_n
n = p * q
phi_n = (p - 1) * (q - 1)
# 选择加密指数e
e = random.randint(2, phi_n)
# 计算解密指数d
d = multiplicative_inverse(e, phi_n)
# 公钥和私钥
public_key = (n, e)
private_key = (n, d)
# 待加密的数据
data = 123456
# 加密
encrypted_data = encrypt(data, public_key)
print('加密后的数据:', encrypted_data)
# 解密
decrypted_data = decrypt(encrypted_data, private_key)
print('解密后的数据:', decrypted_data)
if __name__ == '__main__':
main()
这个例子中,首先我们选择了两个质数p和q,然后根据公式计算出了n和phi_n。然后随机选择了一个加密指数e,并计算出了与e互质的乘法逆元d。将公钥和私钥分别保存,用于加密和解密。
接下来,我们选择一个待加密的数据123456,并将其转换为整数。然后使用公钥对数据进行加密,得到加密后的数据。最后使用私钥对加密后的数据进行解密,得到解密后的数据,与原始数据一致。
通过这个例子,我们可以看到RSA算法的具体实现步骤和效果。需要注意的是,实际环境中,选择的质数p和q要尽可能大,并且对数据进行分组加密以提高安全性。
