Python中使用gnupg库解密失败:生成0字节输出及报错4294967295求助
问题:使用gnupg库解密文件失败(报错decrypt 4294967295)
在Python环境中通过import gnupg导入库(非python-gnupg)解密文件时,出现报错(gnupg:FAILURE status emitted from gpg process: decrypt 4294967295),生成的输出文件为0字节。当前使用gpg版本为2.2.27。
调试信息
- 导入私钥后可获取指纹,但执行
gpg --list-key输出/root/.gnupg/pubring.gpg,执行gpg --list-secret-keys无任何输出; - 已处理权限相关问题;
- gpg agent处于运行状态,可获取
gpg-agent进程ID; - 初始化代码:
cs_gpg_options = ['--pinentry-mode loopback'] gpg = gnupg.GPG(homedir='~/.gnupg', options=cs_gpg_options, verbose=True) - 解密代码:
同时尝试过with open('test_encrypted.csv.gpg', 'rb') as f: decrypted_data = gpg.decrypt_file( f, passphrase='XXX_1234', output='check123.csv')gpg.decrypt()方法,问题仍未解决。
解决思路
- 确认私钥是否成功导入:
gpg --list-secret-keys无输出说明私钥未被当前gpg环境识别。手动执行gpg --homedir ~/.gnupg --import <私钥文件路径>,再执行gpg --homedir ~/.gnupg --list-secret-keys验证私钥是否可见。 - 用gpg命令行直接测试解密:跳过Python库,执行命令
gpg --pinentry-mode loopback --passphrase 'XXX_1234' --output check123.csv --decrypt test_encrypted.csv.gpg,添加-v参数查看详细报错。如果命令行也失败,说明问题出在gpg本身,可排查密码错误、加密文件损坏、私钥不匹配等问题。 - 修正homedir路径:Python代码中
~/.gnupg可能存在路径解析问题,替换为绝对路径(如/root/.gnupg),避免因路径无法识别导致无法读取私钥。 - 重置gpg agent:执行
gpgconf --kill gpg-agent重启agent,同时检查~/.gnupg/gpg-agent.conf是否添加allow-loopback-pinentry配置项,确保loopback模式可用。 - 查看详细错误日志:打印
decrypted_data.stderr获取gpg进程的具体错误输出,直接定位失败原因(如密码错误、私钥不可用等)。
内容的提问来源于stack exchange,提问作者adiideas
相关产品推荐
相关产品推荐

