Python将私钥转换为RSA密钥

时间:2021-04-29 13:51:19

标签: python cryptography rsa private-key

我有一个以下格式的私钥

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6TAbBgkqhki....
----END ENCRYPTED PRIVATE KEY-----

如何将其转换为 RSA 格式的密钥

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA28jIsb8SAhJritwO....
-----END RSA PRIVATE KEY-----

我目前使用的密码学版本是 2.8。任何帮助都非常感谢。提前致谢。

1 个答案:

答案 0 :(得分:2)

如 Maarten Bodewes 的评论所述,使用 OpenSSL 可以将 PKCS#8 格式的加密私钥转换为 PKCS#1 格式的私钥(均为 PEM 编码)。但这也可以通过 Cryptography 库来完成。

Cryptography 库支持导入(加密的)PKCS#8 格式、PEM 编码的私钥,使用方法 load_pem_private_key()(从 0.6 版开始),例如:

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

pkcs8Encrypted = b"""-----BEGIN ENCRYPTED PRIVATE KEY-----
MIICzzBJB...
-----END ENCRYPTED PRIVATE KEY-----"""

privateKey = serialization.load_pem_private_key(
    pkcs8Encrypted, 
    b'mypassword',
    default_backend()
)

可以使用 private_bytes() 导出 PKCS#1 格式、PEM 编码的私钥(从 0.2 版开始):

pkcs1 = privateKey.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.TraditionalOpenSSL,
    encryption_algorithm=serialization.NoEncryption()
)

print(pkcs1.decode('utf-8')) # -----BEGIN RSA PRIVATE KEY-----... 

Cryptography 的当前版本是 3.4.7(2021 年 3 月)。 2.8 来自 2019 年 10 月,s。 Release history。实际上,因此这两种方法都应该可用。