你可以使用cryptography
库来生成一对RSA密钥,并将公私钥分别保存为.pem文件。以下是一个示例代码:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
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()
# 将私钥保存为.pem文件
pem_data_private = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
with open("private_key.pem", "wb") as pem_file_private:
pem_file_private.write(pem_data_private)
print("Private key saved as private_key.pem")
# 将公钥保存为.pem文件
pem_data_public = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
with open("public_key.pem", "wb") as pem_file_public:
pem_file_public.write(pem_data_public)
print("Public key saved as public_key.pem")
这段代码生成了一个2048位的RSA私钥,并通过私钥获取相应的公钥。接着,它将私钥和公钥分别保存为private_key.pem
和public_key.pem
文件。私钥文件不使用任何加密算法(serialization.NoEncryption()
),这是因为在实际应用中,通常会使用密码保护私钥。如果你需要密码保护私钥,可以在serialization.PrivateFormat.PKCS8
和encryption_algorithm
参数中提供相应的值。
你可以使用生成的RSA密钥对中的公钥来加密数据,然后使用私钥来解密。以下是一个示例代码,演示如何使用cryptography
库进行加密和解密:
# pip install cryptography
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
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()
# 将私钥保存为.pem文件
pem_data_private = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
with open("rsa_private_key.pem", "wb") as pem_file_private:
pem_file_private.write(pem_data_private)
print("Private key saved as rsa_private_key.pem")
# 将公钥保存为.pem文件
pem_data_public = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
with open("rsa_public_key.pem", "wb") as pem_file_public:
pem_file_public.write(pem_data_public)
print("Public key saved as rsa_public_key.pem")
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
# 加载公钥
with open("rsa_public_key.pem", "rb") as pem_file_public:
public_key = serialization.load_pem_public_key(
pem_file_public.read(),
backend=default_backend()
)
# 加载私钥
with open("rsa_private_key.pem", "rb") as pem_file_private:
private_key = serialization.load_pem_private_key(
pem_file_private.read(),
password=None, # 如果私钥使用了密码,这里需要提供密码
backend=default_backend()
)
# 要加密的数据
data_to_encrypt = b"51C1F8F6B1C072A82F500811FF8220F6"
# 使用公钥加密数据
encrypted_data = public_key.encrypt(
data_to_encrypt,
padding=padding.PKCS1v15()
)
print("Encrypted data:", encrypted_data.hex())
# 使用私钥解密数据
decrypted_data = private_key.decrypt(
encrypted_data,
padding=padding.PKCS1v15()
)
print("Decrypted data:", decrypted_data.decode("utf-8"))
在这个例子中,首先加载了保存的公钥和私钥。然后,使用公钥对数据进行加密,并使用私钥对加密后的数据进行解密。请注意,加密和解密时需要使用相同的填充方案(padding scheme),这里使用的是OAEP(Optimal Asymmetric Encryption Padding)。
在实际应用中,你可能需要更好地管理密钥和处理异常,同时确保私钥的安全性。
验证OK
要将RSA的公钥指数(E)和模数(N)转换成.pem格式,你可以使用cryptography
库来生成RSA密钥对,并将公钥保存为.pem文件。首先,你需要安装cryptography
库,你可以使用以下命令安装:
pip install cryptography
然后,你可以使用以下Python代码生成RSA密钥对并将公钥保存为.pem文件:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
# 公钥指数(E)和模数(N)
e = 0x00010001
n = 0x88953D31471F761D6F4EA662C5E041DABA36FEBD21F39C741F194869A5C510D70934DD98C308403726CA77604B25DCE8649F6911D4670A99362C5F3F64A0BA927AEB64E0F60E02CCE1D0BA4770A1FC0D5E46A30D7EC82F043C21F4D8D86B23298F914144ECD2B1E11D1D37016DBC57693412A2899DC15BEDD998156C605DCE009B6901BC1497ED41F3DEF4EFD6709F205A046481442572780CEC0F55260E24E8DCA6FA294181B5D3B9B30F391E0BAEBE573FD85948DA9E7BD5ABDA7ECAA835CD8F5C787BF043107DF4A34F0EFA875D3DDB22D58085881494BEDA413FAA5E7E7AF1E9B4B6B84F4DA8059C5F1DC0423E448FED7DEC9668E8105439CC9619EC7E99
# 将整数转换为字节数组
e_bytes = e.to_bytes((e.bit_length() + 7) // 8, byteorder='big')
n_bytes = n.to_bytes((n.bit_length() + 7) // 8, byteorder='big')
# 生成RSA公钥
public_key = rsa.RSAPublicNumbers(e, n).public_key(backend=default_backend())
# 将公钥保存为.pem文件
pem_format = serialization.PublicFormat.SubjectPublicKeyInfo
pem_data = public_key.public_bytes(encoding=serialization.Encoding.PEM, format=pem_format)
with open("public_key.pem", "wb") as pem_file:
pem_file.write(pem_data)
print("Public key saved as public_key.pem")
这段代码使用cryptography
库,将给定的公钥指数(E)和模数(N)转换成RSA公钥对象,然后保存为.pem文件。最后,你可以在脚本所在的目录中找到名为public_key.pem
的文件,其中包含了你的RSA公钥。