如何使用load_pem_public_key()函数加载PEM格式的公钥文件
发布时间:2024-01-05 04:42:32
在Python中,可以使用cryptography库中的load_pem_public_key()函数来加载PEM格式的公钥文件。该函数可以从PEM字符串或文件加载公钥,并返回cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey对象。
下面是使用load_pem_public_key()函数加载PEM格式的公钥文件的示例:
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
# 从PEM文件加载公钥
def load_public_key_from_pem_file(filename):
with open(filename, "rb") as file:
pem_data = file.read()
public_key = serialization.load_pem_public_key(pem_data)
return public_key
# 从PEM字符串加载公钥
def load_public_key_from_pem_string(pem_string):
pem_data = pem_string.encode("utf-8")
public_key = serialization.load_pem_public_key(pem_data)
return public_key
# 示例用的公钥PEM字符串
public_key_pem_string = """
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA/DG6q8qeJqgQYNpjJmj/
uo+PwKPuafIbtN4ShTb1aRPu+uUKPrt2t1WEsdLdAiA4vgzvqA6TgWqCgGkF95br
NvLMQHZ3h7skbFad2wkfoP48ySX1KH7WRQb3RiIpJpGLOEXkcfnO+ZDyji3Zvdph
zgevOK2A8YjoVI7laDF8LyoX8z+F/r0Qwd1o4ArNWZwCdEfKxbiSJEefEDsOXzQ/
TCu2vu2In+8Jyj66ebBrwZKtd4gyyA9pZnPQSKS+WOVBpIh3qcLLx/jnpcCaxNEZ
+VJapMfA/Y7Jz9CO038VLATOfG3ZB55LaPqcQK0f62ZAU+9+1icsY8YSgC12KZfA
0yy1+8jXLt1N8d0lvO2ni06oozsCNsCV+wow0eBpxIEelhjpTaanjQcfn5f6gYog
n5vObm84MqEjDvJjNwj8D2mZZT1xYBSmynYmecjEWl6+U37xzwpg0dRzakWuV9NV
czWx9OYcRUB9gnyHCY509Y+K6RTi94RcCe5JwGRLIKJeJCERWeGzvmIFuMPbzt0D
xLiqL46eWqkzOat6OvZuf2zBxBEzQ22BiWJgZi+gnDGcY5GIZaG4S0lkhEb59LjP
9Y4RjCQWd/N7iHrACn7AdzjFUi+z3a0Oxlzcpvwv+lALm7wNZC0LKuGDI3n1mNA4
6Qx6pWvYE0yiBllsYDMKmzcCAwEAAQ==
-----END PUBLIC KEY-----
"""
# 示例用的PEM文件名
public_key_pem_file = "public_key.pem"
# 从PEM字符串加载公钥
public_key1 = load_public_key_from_pem_string(public_key_pem_string)
print("Public Key from PEM String:", public_key1)
# 保存PEM字符串为文件
with open(public_key_pem_file, "w") as file:
file.write(public_key_pem_string)
# 从PEM文件加载公钥
public_key2 = load_public_key_from_pem_file(public_key_pem_file)
print("Public Key from PEM File:", public_key2)
在上面的示例中,load_public_key_from_pem_string()函数将PEM格式的公钥字符串转换为公钥对象。首先,将PEM字符串编码为字节串后,调用serialization.load_pem_public_key()函数来加载公钥。返回的public_key是cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey类型的对象。
load_public_key_from_pem_file()函数通过文件名从PEM文件加载公钥。首先,使用open()函数打开PEM文件,然后使用read()函数读取PEM数据。最后,调用serialization.load_pem_public_key()函数来加载公钥。
在示例中,我们使用了一个示例PEM格式的公钥字符串,并将其保存到了一个名为"public_key.pem"的PEM文件中。最后,输出加载的公钥对象。
请注意,在使用load_pem_public_key()函数加载PEM格式的公钥时,可能会抛出ValueError异常,例如由于PEM格式不正确或无效的公钥导致的异常。因此,在实际使用中,需要确保PEM字符串或文件是正确且有效的公钥PEM格式。
