【问题标题】:How to print public key from certificates using "cryptography" library in Python2?如何使用 Python2 中的“密码学”库从证书中打印公钥?
【发布时间】:2019-10-30 20:31:44
【问题描述】:

我必须使用 Python2 中的密码库从 .pem 证书中提取公钥,但只能获取公钥对象。

在密码学文档中,我找到了这段代码

from cryptography.hazmat.primitives.asymmetric import rsa

pem_cert=open("/home/lab14/aes/fd.pem","rb").read()

cert = x509.load_pem_x509_certificate(pem_cert, default_backend())

public_key = cert.public_key()

print(public_key)

但是当运行这个时,我得到公钥对象,但不是十六进制格式的实际密钥。

这是我得到的输出

<cryptography.hazmat.backends.openssl.rsa._RSAPublicKey object at 0x7f49e214d6d8>

任何帮助都会有所帮助和感激。 谢谢

【问题讨论】:

  • 一个 RSA public 由两个(通常很大)数字组成。没有明显的表示为单个十六进制字符串。

标签: python cryptography certificate x509certificate


【解决方案1】:

您并没有真正说出要打印的内容或原因。如果您只想打印 RSAPublicKey 的公共指数和模数,您可以这样做:

public_key = cert.public_key()
print((public_key.public_numbers().e, public_key.public_numbers().n))

【讨论】:

    【解决方案2】:

    您有一个公钥object,需要对其进行编码以检索以字节为单位的密钥表示形式。然后可以使用任何十六进制编码器对这些字节进行编码 - 如果需要的话。

    所以只需调用public_bytes(encoding, format) 来检索字节。编码可以是SubjectPublicKeyInfo,它包含有关公钥类型的信息(它是一个通用密钥)或PKCS1,它基本上包含RSA公钥的最小编码。请注意,您可能必须先建立密钥类型,然后才能使用 PKCS1,因为这仅描述 RSA 密钥。

    您还可以在 DER 和 PEM 格式之间进行选择。 DER 只返回 ASN.1 定义的 RSA 公钥结构的字节表示。 PEM base 64 对该结构进行编码并添加页眉和页脚行以创建密钥的文本表示。

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多