使用Python实现RSA算法进行数据加解密操作详解
发布时间:2023-12-24 10:01:25
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于信息安全领域。它利用了大数分解的难题,实现了对数据的加密和解密操作。
RSA算法的核心原理是选择两个较大的质数p和q,计算n=p*q。然后选择一个整数e,满足1<e<φ(n),并且e与φ(n)互质,其中φ(n)=(p-1)*(q-1)。再选择一个整数d,满足d*e=1(mod φ(n))。最后,公钥为(n, e),私钥为(n, d)。
使用Python实现RSA算法可以使用Python的cryptography库。
下面是RSA算法的数据加解密操作的示例代码:
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
# 生成RSA公私钥对
def generate_keys():
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
with open('private_key.pem', 'wb') as f:
f.write(private_pem)
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.PKCS1
)
with open('public_key.pem', 'wb') as f:
f.write(public_pem)
# 加密数据
def encrypt(data):
with open('public_key.pem', 'rb') as f:
public_key = serialization.load_pem_public_key(
f.read(),
backend=default_backend()
)
encrypted_data = public_key.encrypt(
data.encode(),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return encrypted_data
# 解密数据
def decrypt(encrypted_data):
with open('private_key.pem', 'rb') as f:
private_key = serialization.load_pem_private_key(
f.read(),
password=None,
backend=default_backend()
)
decrypted_data = private_key.decrypt(
encrypted_data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return decrypted_data.decode()
# 生成RSA公私钥对
generate_keys()
# 加密数据
encrypted_data = encrypt("Hello, RSA!")
# 解密数据
decrypted_data = decrypt(encrypted_data)
print("加密后的数据: ", encrypted_data)
print("解密后的数据: ", decrypted_data)
在以上示例代码中,首先通过generate_keys函数生成了RSA公私钥对,并将其保存到了public_key.pem和private_key.pem文件中。
然后,通过encrypt函数实现了数据加密的过程。首先从public_key.pem文件中读取公钥,然后使用该公钥对输入数据进行加密,并返回加密后的数据。
最后,通过decrypt函数实现了数据解密的过程。首先从private_key.pem文件中读取私钥,然后使用该私钥对加密后的数据进行解密,并返回解密后的数据。
最后,在使用例子中,我们调用了generate_keys函数生成RSA公私钥对,然后调用了encrypt函数对数据进行加密,最后调用decrypt函数对加密后的数据进行解密,并打印出结果。
通过以上示例代码,我们可以实现RSA算法的数据加解密操作,保护敏感数据的安全性。
