调用pgpy.PGPKey.from_blob解析密钥时报ASCII-armored PGP data错误
问题诱因
- 输入的
key_string不符合ASCII装甲PGP数据的格式要求。标准ASCII装甲PGP密钥固定以-----BEGIN PGP PUBLIC KEY BLOCK-----(公钥)或-----BEGIN PGP PRIVATE KEY BLOCK-----(私钥)开头,对应结尾为-----END PGP PUBLIC KEY BLOCK-----/-----END PGP PRIVATE KEY BLOCK-----,中间为base64编码内容和校验和。如果你的密钥是二进制格式(通常后缀为.gpg/.pgp),没有做ASCII装甲编码,就会触发该错误。 key_string内容存在异常:首尾有多余空白、不可见特殊字符,或者装甲头/尾标识被修改、内容截断,都会导致pgpy无法识别标准PGP格式。- 编码错误:读取密钥时用了错误的编码格式转换二进制内容,或者密钥在传输、存储过程中被转码损坏,导致内容不符合PGP格式要求。
解决方案
- 校验密钥格式:先打印
key_string前100个字符确认是否存在标准PGP装甲头。如果确认是二进制格式密钥,直接传入字节类型数据即可,无需转成字符串:
# 读取本地二进制密钥文件示例 with open("target_key.pgp", "rb") as f: key_content = f.read() pgp_key = pgpy.PGPKey.from_blob(key_content)
- 清理ASCII装甲密钥内容:确认是ASCII格式的话,先清理首尾多余空白再传入:
clean_key = key_string.strip() pgp_key = pgpy.PGPKey.from_blob(clean_key)
- 修正
parse方法的调用逻辑:PGPKey.parse是类方法,不需要先实例化PGPKey对象,正确用法如下:
# 解析ASCII装甲格式 pgp_key = pgpy.PGPKey.parse(key_string.strip()) # 解析二进制格式 with open("target_key.pgp", "rb") as f: pgp_key = pgpy.PGPKey.parse(f.read())
内容的提问来源于stack exchange,提问作者Rohith Joseph
相关产品推荐
相关产品推荐

