python3.11,如何生成RSA PEM格式的密钥对,然后进行加密解密?
时间: 2024-02-16 19:12:02 浏览: 126
python实现RSA加密(解密)算法
5星 · 资源好评率100%
在 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 填充算法。
阅读全文