关于加密:Python加密包RSA – 将私钥保存到DB

Python cryptography package RSA — save private key to DB

我想用python cryptography库中的rsa加密一些东西。(https://cryptography.io/en/latest/hazmat/primitives/asymmetric/rsa/)

首先,我有我的秘密消息和两种类型的密钥(公共密钥和私有密钥):

1
2
3
4
5
6
7
8
9
10
11
from cryptography.hazmat.primitives.asymmetric import rsa

SECRET = 'Ligula Venenatis Etiam Fermentum'

private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)

public_key = private_key.public_key()

现在我可以用公钥加密msg:

1
2
3
4
5
6
7
8
9
10
11
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

ciphertext = public_key.encrypt(
    SECERT,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA1()),
        algorithm=hashes.SHA1(),
        label=None
    )
)

伟大的!但由于解密此消息,我需要使用private_key

1
2
3
4
5
6
7
8
plaintext = private_key.decrypt(
    ciphertext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA1()),
        algorithm=hashes.SHA1(),
        label=None
    )
)

一切正常,唯一的问题是--我需要将私钥保存到数据库中,稍后再解密msg。不能将RSA类实例用于此目的。

也许我使用了错误的工具,或者只是不太了解这个库,但是到目前为止,在文档中还没有找到答案。

感谢您的帮助:)


您可以在不加密的情况下序列化私钥。

1
2
3
4
5
6
pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.TraditionalOpenSSL,
    encryption_algorithm=serialization.NoEncryption()
)
pem_data = pem.splitlines()[0]

将pem_数据存储到数据库中,并在需要时作为pem的私钥重新加载。