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

GPG密钥文件存在但list-keys无输出、解密失败问题排查求助

问题1:恢复GPG密钥识别的操作步骤

故障根因是公钥索引文件pubring.kbx损坏,searched keybox => EOF的报错直接指向该文件读取异常,多是旧版本python-gnupg和GnuPG 2.2.x交互时误写索引文件导致,按以下步骤修复:

  • 第一步:先备份完整gnupg目录,避免操作失误丢失密钥
cp -r /usr/home/username/.gnupg /usr/home/username/.gnupg.bak
  • 第二步:删除损坏的索引文件
rm /usr/home/username/.gnupg/pubring.kbx /usr/home/username/.gnupg/pubring.gpg /usr/home/username/.gnupg/pubring.kbx~
  • 第三步:重新导入私钥重建索引
gpg --import /usr/home/username/.gnupg/private-keys-v1.d/*.key

如果有之前导出的asc格式密钥备份,也可以替换上面的路径为备份文件路径导入。

  • 第四步:验证修复结果
    执行gpg --list-secret-keys,如果正常输出私钥信息,再测试命令行解密即可恢复正常。
问题2:Python解密代码调整

首先确认安装正确的依赖包:

pip install python-gnupg

原代码存在3个问题:未指定gpg二进制路径导致可能调用到错误版本、未添加信任参数导致密钥校验失败、未处理bytes类型的解密结果,修正后代码如下:

import gnupg

# 显式指定gnupg家目录和gpg二进制路径,避免适配问题
gpg = gnupg.GPG(gnupghome='/usr/home/username/.gnupg', gpgbinary='/usr/bin/gpg')
encrypted_string = '''-----BEGIN PGP MESSAGE-----
...替换为真实加密数据,不要保留多余缩进或换行...
-----END PGP MESSAGE-----'''

# 解密添加always_trust参数,跳过非必要的密钥信任等级校验
decrypted_data = gpg.decrypt(
    encrypted_string,
    passphrase='你的真实密钥密码',
    always_trust=True
)

if decrypted_data.ok:
    # 解密结果默认是bytes类型,按需转字符串即可
    print('解密成功,内容:', decrypted_data.data.decode('utf-8'))
else:
    print('解密失败,状态:', decrypted_data.status)

注意事项

  • 运行Python程序的用户必须和生成密钥的用户一致,确保对/usr/home/username/.gnupg目录有读写权限
  • 不要在多进程/多线程场景下并发调用gnupg操作,避免再次损坏索引文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:57:02