如何将公钥从字符串类型转换为 PEM

Posted

技术标签:

【中文标题】如何将公钥从字符串类型转换为 PEM【英文标题】:how convert a public key from string type to PEM 【发布时间】:2021-12-22 01:47:55 【问题描述】:

我有一个问题,我需要一些帮助。 我需要从发送方向接收方发送一条消息,这条消息的内容是签名数据和公钥等。请注意,我使用证书 x509(公钥来自证书)。在接收方,我必须验证数据的签名(真假)。因此,我使用发件人的公钥进行验证。但是我有一个问题,公钥是字符串格式。我尝试转换它。但不幸的是,我没有找到任何解决方案。

这是将要发送的消息:

data['message'] = data
data['_signature'] = self.sign_data(data)   
data['_public_key'] = str ( self.certificate.public_key())

【问题讨论】:

【参考方案1】:

你不能使用str将公钥(certificate.public_key())转换成字符串,因为这个方法会返回key对象。

如果您需要将公钥编码为 PEM 字符串,那么您必须通过序列化为 PEM 来正确执行:

public_pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)

然后从另一端,您可以加载 PEM 密钥并使用它:

from cryptography.hazmat.primitives import serialization

public_key2 = serialization.load_pem_public_key(public_pem, default_backend())

【讨论】:

谢谢你的回答

以上是关于如何将公钥从字符串类型转换为 PEM的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PEM格式的公钥创建证书对象?

如何从 .cer 中提取 RSA 公钥并使用 OpenSSL 将其存储在 .pem 中?

在 Dart 中将 ECPrivateKey/ECPublicKey 转换为 PEM 字符串

如何从字符串转换为日期数据类型?

如何将 MongoDB 中的属性从文本类型转换为日期类型?

sh 将密钥从二进制(由生成密钥生成)转换为pem格式。适用于私钥和公钥