python - 如何使用 Python2 中的“密码学”库从证书中打印公钥?
问题描述
我必须使用 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>
任何帮助都会有所帮助和赞赏。谢谢
解决方案
您有一个公钥对象,需要对其进行编码以检索以字节为单位的密钥表示。然后可以使用任何十六进制编码器对这些字节进行编码——如果需要的话。
所以只需调用public_bytes(encoding, format)
来检索字节。编码可以是SubjectPublicKeyInfo
,它包含有关公钥类型的信息(它是通用密钥)或PKCS1
,它基本上包含 RSA 公钥的最小编码。请注意,您可能必须先建立密钥类型才能使用PKCS1
,因为这仅描述 RSA 密钥。
您还可以在 DER 和 PEM 格式之间进行选择。DER 只返回 ASN.1 定义的 RSA 公钥结构的字节表示。PEM base 64 对该结构进行编码并添加页眉和页脚行以创建密钥的文本表示。
推荐阅读
- haskell - 是否可以定义您自己的 Persistent / Esqueleto 镜片?
- elasticsearch - Search Guard 5 - ][WARN][cfscPrivilegesEvaluator] 无法处理复合请求
- php - 内连接3个不同的表codeigniter
- c# - 从模型错误中获取数据
- python - Flatlib - bdist_wheel 错误
- r - 计算R中数据框中每一列的百分位数
- c# - 在 App.xaml 的 EventSetter 上出现错误 CS1061
- scala - 使用 nth 进行 2D 插值
- css - CSS 没有完全应用在影子 DOM 上
- excel - 在excel中使用Find方法后如何访问相邻单元格数据?