You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python结合.pkr与.skr密钥环解密PGP文件?

解决Python脚本使用.pkr/.skr密钥环解密PGP文件的问题

核心问题定位

你的问题出在python-gnupg未正确指向老式GnuPG密钥环文件(.pkr是公钥环,.skr是私钥环,属于GPG 2.1之前的格式),导致库无法找到私钥。Cleopatra能正常解密说明密钥环本身有效,只需调整脚本配置即可解决。

实现步骤与代码示例

  1. 先安装依赖库:
pip install python-gnupg
  1. 编写解密脚本,明确指定密钥环路径:
import gnupg

# 初始化GPG对象,指定密钥环所在目录和文件名
gpg = gnupg.GPG(
    gnupghome="/path/to/your/key-files-directory",  # 替换为存放.pkr/.skr的实际目录
    public_keyring="example.pkr",
    secret_keyring="example.skr"
)

# 先验证私钥是否能被识别
private_keys = gpg.list_keys(True)  # True参数用于列出私钥
if not private_keys:
    print("错误:私钥环中未找到可用私钥")
else:
    print(f"已识别私钥:{private_keys[0]['uids']}")

# 执行解密操作
with open("examplefile.pgp", "rb") as encrypted_file:
    decrypted_result = gpg.decrypt_file(
        encrypted_file,
        passphrase="your-passphrase-here",  # 替换为给定的passphrase
        output="decrypted_text.txt"  # 可选:直接将解密内容写入文件
    )

# 输出结果
if decrypted_result.ok:
    print("解密成功!")
    print("解密内容:\n", decrypted_result.data.decode("utf-8"))
else:
    print(f"解密失败:{decrypted_result.stderr}")

关键注意事项

  • 权限检查:确保.pkr和.skr文件的权限符合GnuPG要求(建议设为chmod 600 example.skr),避免因权限过宽被GnuPG拒绝读取。
  • 路径准确性:gnupghome必须是密钥环文件所在的目录路径,而非文件路径;public_keyring和secret_keyring是该目录下的密钥环文件名。
  • 版本兼容:确保本地安装的GnuPG版本(可通过gpg --version查看)与python-gnupg版本兼容,建议使用python-gnupg 0.5.x以上版本配合GnuPG 2.x。
  • 故障排查:如果仍提示"no secret key",可先用命令行验证密钥环有效性:
gpg --secret-keyring example.skr --list-secret-keys

若命令行能列出私钥,说明脚本路径配置有误;若命令行也无法识别,可尝试将私钥导出再重新导入:

gpg --secret-keyring example.skr --export-secret-keys | gpg --import

内容的提问来源于stack exchange,提问作者Rahul M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:45:47