Python cryptography package RSA — save private key to DB
我想用python
首先,我有我的秘密消息和两种类型的密钥(公共密钥和私有密钥):
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 ) ) |
伟大的!但由于解密此消息,我需要使用
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的私钥重新加载。