如何用Python结合.pkr与.skr密钥环解密PGP文件?
解决Python脚本使用.pkr/.skr密钥环解密PGP文件的问题
核心问题定位
你的问题出在python-gnupg未正确指向老式GnuPG密钥环文件(.pkr是公钥环,.skr是私钥环,属于GPG 2.1之前的格式),导致库无法找到私钥。Cleopatra能正常解密说明密钥环本身有效,只需调整脚本配置即可解决。
实现步骤与代码示例
- 先安装依赖库:
pip install python-gnupg
- 编写解密脚本,明确指定密钥环路径:
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
相关产品推荐
相关产品推荐

