【发布时间】:2021-06-12 11:09:56
【问题描述】:
我需要在 Python 中生成一对私钥和公钥。我曾经在mkjwk 网站上生成它们,但我想自动化这个过程。
我需要以图片中以黄色突出显示的格式生成密钥。
我尝试使用cryptography 库来解决这个问题。
我设法生成了所需格式的私钥,但我不知道如何生成公钥。
key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
private_key = key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption(),
)
我将非常感谢您对此提供任何帮助。如果有更好的方法,则不必使用cryptography 库来完成。
【问题讨论】:
-
您发布的代码当前会生成一个 PKCS#1 私钥(PEM 编码)。但是,屏幕截图中以黄色突出显示的私钥是 PKCS#8 密钥(PEM 编码)。对于以这种格式返回私钥的代码,必须使用
serialization.PrivateFormat.PKCS8而不是serialization.PrivateFormat.TraditionalOpenSSL,参见here。 -
网站“jwt.io”提供了有关 JWT 库的概述(您在 JWK 编码中的公钥,因此我认为它可用于任何 JWT/JWE/JWS 工作流程。
-
在 Cryptography 库的documentation 中描述了公钥(X.509/SPKI、PEM)的相应导出。但是,屏幕截图中以黄色突出显示的公钥具有 JWK 格式。 Cryptography afaIk 不支持这种格式。为此,您必须使用另一个库直接生成这种格式的密钥或支持转换 JWK PEM,例如JWCrypto.
标签: python python-3.x cryptography public-key jwk