from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
# 生成RSA密钥对
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048, backend=default_backend())
public_key = private_key.public_key()
# 获取模数和指数
modulus = public_key.public_numbers().e
exponent= public_key.public_numbers().n
print("模数 (Modulus):", modulus)
print("指数 (Exponent):", exponent)
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa, padding
# 生成RSA密钥对
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048, backend=default_backend())
public_key = private_key.public_key()
# 原始数据
data = b"Hello, World!"
# 加密数据
cipher_suite = padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
encrypted_data = public_key.encrypt(data, cipher_suite)
# 将加密后的数据转换为PEM格式并打印
encrypted_data_pem = public_key.public_bytes(encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo)
print("加密后的数据 (PEM 格式):")
print(encrypted_data_pem.decode('utf-8'))
# 解密数据
decrypted_data = private_key.decrypt(encrypted_data, cipher_suite)
# 打印解密后的数据
print("解密后的数据:", decrypted_data)
这段代码使用Python的cryptography库实现了RSA加解密。
首先,通过调用rsa.generate_private_key()
函数生成了一个2048位的RSA私钥对象,并通过.public_key()
方法获得对应的公钥对象。
然后,定义了原始数据data
为"Hello, World!"。
接下来,使用padding.OAEP
进行数据的加密。OAEP是一种填充方案,它使用了MGF1哈希函数和SHA256算法来保证安全性。
调用public_key.encrypt(data, cipher_suite)
方法对原始数据进行加密,得到了加密后的数据encrypted_data
。
使用public_key.public_bytes()
方法将加密后的数据转换为PEM格式,并打印出来。
然后,使用私钥对象调用private_key.decrypt(encrypted_data, cipher_suite)
方法对加密后的数据进行解密,得到解密后的数据decrypted_data
。
最后,打印出解密后的数据。