python生成一对RSA密钥,并将公私钥分别保存为.pem文件 使用生成的RSA密钥对中的公钥来加密数据,然后使用私钥来解密。 RSA的公钥指数(E)和模数(N)转换成.pem格式

你可以使用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.pempublic_key.pem文件。私钥文件不使用任何加密算法(serialization.NoEncryption()),这是因为在实际应用中,通常会使用密码保护私钥。如果你需要密码保护私钥,可以在serialization.PrivateFormat.PKCS8encryption_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公钥。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python 3.11 ,可以使用 `cryptography` 模块来生成 RSA 密钥对,并将其保存PEM 格式。具体的步骤如下: 1. 首先需要安装 `cryptography` 模块,可以使用以下命令进行安装: ``` pip install cryptography ``` 2. 然后可以使用以下代码生成 RSA 密钥对,并将其保存PEM 格式: ```python from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization # 生成 RSA 密钥对 private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048 ) public_key = private_key.public_key() # 将密钥保存PEM 格式 private_pem = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption(), ) public_pem = public_key.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo, ) # 打印密钥对 print("私钥:\n", private_pem.decode()) print("公钥:\n", public_pem.decode()) ``` 在上面的代码使用 `rsa.generate_private_key()` 方法生成一个 2048 位的 RSA 密钥对,然后分别使用 `private_key.private_bytes()` 和 `public_key.public_bytes()` 方法将密钥保存PEM 格式。其私钥不用加密,所以使用 `serialization.NoEncryption()`,公钥不需要加密所以不需要指定加密算法。 3. 生成密钥对之后,可以使用以下代码进行加密解密: ```python from cryptography.hazmat.primitives import hashes # 加密 message = b"Hello, world!" ciphertext = public_key.encrypt( message, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None, ) ) # 解密 plaintext = private_key.decrypt( ciphertext, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None, ) ) print("原始消息:", message) print("加密后消息:", ciphertext) print("解密后消息:", plaintext) ``` 在上面的代码使用 `public_key.encrypt()` 方法对消息进行加密使用 `private_key.decrypt()` 方法对密文进行解密。在加密解密时,需要使用相同的填充算法,这里使用的是 OAEP 填充算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值