Python使用PGP私钥解密音频文件报缺失User ID错误如何解决
PGP私钥解密提示缺少User ID的解决方案
报错说明
你遇到的报错中文翻译为:
pgpy.errors.PGPError: 密钥不完整 - 请添加用户ID!
原因与解决方案
- 报错根因:PGPY库执行解密操作前会校验私钥完整性,要求私钥必须绑定至少1个User ID,你当前加载的私钥文件导出时没有附带用户ID信息,触发校验失败。
- 修复方法:在私钥解锁前手动添加合法的User ID即可,同时注意
decrypt方法需要传入PGP消息对象而非直接传文件名,修正后的完整代码如下:
import pgpy PRIVATE_KEY_FILE = "替换为你的私钥文件本地路径" ENCRYPTED_FILE = "encryptedfilename" # 替换为你的加密音频文件路径 PASSPHRASE = "PASSPHRASE1124124" # 加载本地私钥文件 prv_key, _ = pgpy.PGPKey.from_file(str(PRIVATE_KEY_FILE)) # 手动添加User ID,格式可自定义,和你生成密钥时填写的信息一致即可 prv_key.add_uid("自定义用户名", email="yourmail@example.com") print("密钥是否受密码保护:" ,prv_key.is_protected) with prv_key.unlock(PASSPHRASE): print("密钥是否解锁成功:", prv_key.is_unlocked) # 先读取加密文件生成PGP消息对象 encrypted_msg = pgpy.PGPMessage.from_file(ENCRYPTED_FILE) # 执行解密 decrypted_content = prv_key.decrypt(encrypted_msg) # 解密后的音频内容写入新文件,二进制模式写入避免损坏 with open("decrypted_output.mp3", "wb") as f: f.write(decrypted_content.message)
补充说明
如果你的私钥文件本身是完整包含User ID的,可检查是否导出私钥时只导出了私钥主体、遗漏了关联的公钥/用户ID信息,重新导出完整私钥即可无需手动添加UID。
内容的提问来源于stack exchange,提问作者user506129
相关产品推荐
相关产品推荐

