自学内容网 自学内容网

pyca/cryptography库的学习(7)中的RSA密钥保存

from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization

# 生成 RSA 私钥
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
)

# 将私钥序列化为 PEM 格式
pem_private_key = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()  # 无加密保存
)

# 保存私钥到 PEM 文件
with open("private_key.pem", "wb") as pem_file:
    pem_file.write(pem_private_key)

# 获取公钥
public_key = private_key.public_key()

# 将公钥序列化为 PEM 格式
pem_public_key = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)

# 保存公钥到 PEM 文件
with open("public_key.pem", "wb") as pem_file:
    pem_file.write(pem_public_key)

print("私钥和公钥已成功保存为 PEM 文件!")

读取私钥的方式如下:
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.serialization import load_pem_private_key

从 PEM 文件中加载私钥

with open("private_key.pem", "rb") as pem_file:
    private_key = load_pem_private_key(
        pem_file.read(),
        password=None  # 如果私钥加密了,提供密码,例如 b"your_password"
    )

使用私钥解密消息:

# 假设有一个加密的消息 encrypted_message (字节类型)
encrypted_message = b"...加密的数据..."  # 替换为实际加密数据

# 解密消息
decrypted_message = private_key.decrypt(
    encrypted_message,
    padding.OAEP(  # 使用 OAEP 填充
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

# 输出解密后的消息
print("解密后的消息:", decrypted_message.decode("utf-8"))

原文地址:https://blog.csdn.net/qq_45983946/article/details/144790291

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!