Python私钥加密

2024-09-28 18:55:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DER格式的私钥。我正在尝试将其转换为PEM,并同时用密码短语加密私钥。在

下面是我用来转换和加密的openssl命令:

> openssl rsa -aes256 -inform der -in temp_key.der -outform pem -passout pass:<password>

我正在尝试在Python中实现一个类似的逻辑,在那里我以DER格式在内存中保存键的数据。 我想把它改成PEM,加密,然后存储到一个文件中。在

我不太熟悉Python的加密库,我很难找到正确的方法来转换和加密我的密钥数据。在


Tags: 数据keyin命令密码格式pemrsa
3条回答

另外两个答案都对你有用。纯粹是为了变化,我要加上我的。 对于RSA,我个人更喜欢使用PyCryptodome,因为它在RSA密码方面有更多的特性,而且它的RSA实例是用纯python编写的。

此代码应适用于您:

from Crypto.PublicKey import RSA

key = RSA.import(open('key.der', 'rb').read())

with open('key.pem', 'wb') as f:

    pem_key = key.export_key(passphrase='password')

    f.write(pem_key)
    f.close()

如果需要,可以指定导出密钥的输出格式,但当前(v3.8)默认为PEM。

希望这有帮助,并且您可以在https://cryptography.io和{a2}上找到这两个库的完整文档

您可以在cryptography模块的帮助下加载DER密钥并将其作为受密码保护的PEM密钥转储,如下所示:

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

private_key = serialization.load_der_private_key(
    der_data, # assuming that "der_data" variable contains your DER key
    password=None,
    backend=default_backend()
)

pem_encrypted = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.BestAvailableEncryption(b'mypassword')
)

print(pem_encrypted.decode()) #   -BEGIN ENCRYPTED PRIVATE KEY  -...

为python使用了cryptography模块 这是我在

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import load_der_private_key
from cryptography.hazmat.primitives import serialization


key = load_der_private_key(
            der_data, password=None, backend=default_backend())

password_protected_key = key.private_bytes(encoding=serialization.Encoding.PEM,
                                        format=serialization.PrivateFormat.TraditionalOpenSSL,
                                        encryption_algorithm=serialization.BestAvailableEncryption("password"))

相关问题 更多 >