Python GnuPG 解密在 Windows 上成功但在 Linux 上失败
Python GnuPG decryption succeeds on Windows but fails on Linux
我正在使用 python-gnupg 包来使用我生成的密钥解密文件。由于我无法解释的原因,此代码在 Windows 上运行并成功解密文件:
import gnupg
import os
key_data = '''-----BEGIN PGP PRIVATE KEY BLOCK-----
<key data here>
-----END PGP PRIVATE KEY BLOCK-----
'''
gpg_path = "C:/Program Files (x86)/GnuPG/bin/gpg.exe":
gpg = gnupg.GPG(gpg_path)
gpg.encoding = 'utf-8'
import_result = gpg.import_keys(key_data)
with open(r"C:\Users\test\Downloads\my.csv.gpg", "rb") as f:
status = gpg.decrypt_file(f, passphrase=None, output=r"C:\Users\test\Downloads\TEST.CSV")
print("STATUS OK ? " + str(status.ok))
print("STDERR: " + str(status.stderr))
我看到打印的是“STATUS OK?True”。
然而,此代码无法在同一台 PC 上的 dockerized Linux 环境中解密:
import gnupg
import os
key_data = '''-----BEGIN PGP PRIVATE KEY BLOCK-----
<key data here>
-----END PGP PRIVATE KEY BLOCK-----
'''
gpg_path = "/usr/bin/gpg":
gpg = gnupg.GPG(gpg_path)
gpg.encoding = 'utf-8'
import_result = gpg.import_keys(key_data)
with open(r"/home/test/my.csv.gpg", "rb") as f:
status = gpg.decrypt_file(f, passphrase=None, output=r"/home/test/TEST.CSV")
print("STATUS OK ? " + str(status.ok))
print("STDERR: " + str(status.stderr))
我看到打印了“STATUS OK ? False”,没有其他错误。未创建输出文件。两个环境都是运行 Python 3.7.9,运行 pip show python-gnupg在两个环境下的输出是一样的。我已确保复制加密文件并尝试使用各种编码保存它。 Linux 环境是通过 WSL 的 Debian。
事实证明,Debian 发行版中包含的 gpg
构建没有按预期工作。我从源代码安装了 2.2.27 版本,并通过 gpgbinary
参数在 Python 中的 GPG 对象的构造函数中指定了可执行路径,然后我能够使用脚本成功解密。我得到的提示是 linux 发行版中的构建可能无法在注释部分的 https://pythonhosted.org/python-gnupg/ 中运行。
我正在使用 python-gnupg 包来使用我生成的密钥解密文件。由于我无法解释的原因,此代码在 Windows 上运行并成功解密文件:
import gnupg
import os
key_data = '''-----BEGIN PGP PRIVATE KEY BLOCK-----
<key data here>
-----END PGP PRIVATE KEY BLOCK-----
'''
gpg_path = "C:/Program Files (x86)/GnuPG/bin/gpg.exe":
gpg = gnupg.GPG(gpg_path)
gpg.encoding = 'utf-8'
import_result = gpg.import_keys(key_data)
with open(r"C:\Users\test\Downloads\my.csv.gpg", "rb") as f:
status = gpg.decrypt_file(f, passphrase=None, output=r"C:\Users\test\Downloads\TEST.CSV")
print("STATUS OK ? " + str(status.ok))
print("STDERR: " + str(status.stderr))
我看到打印的是“STATUS OK?True”。
然而,此代码无法在同一台 PC 上的 dockerized Linux 环境中解密:
import gnupg
import os
key_data = '''-----BEGIN PGP PRIVATE KEY BLOCK-----
<key data here>
-----END PGP PRIVATE KEY BLOCK-----
'''
gpg_path = "/usr/bin/gpg":
gpg = gnupg.GPG(gpg_path)
gpg.encoding = 'utf-8'
import_result = gpg.import_keys(key_data)
with open(r"/home/test/my.csv.gpg", "rb") as f:
status = gpg.decrypt_file(f, passphrase=None, output=r"/home/test/TEST.CSV")
print("STATUS OK ? " + str(status.ok))
print("STDERR: " + str(status.stderr))
我看到打印了“STATUS OK ? False”,没有其他错误。未创建输出文件。两个环境都是运行 Python 3.7.9,运行 pip show python-gnupg在两个环境下的输出是一样的。我已确保复制加密文件并尝试使用各种编码保存它。 Linux 环境是通过 WSL 的 Debian。
事实证明,Debian 发行版中包含的 gpg
构建没有按预期工作。我从源代码安装了 2.2.27 版本,并通过 gpgbinary
参数在 Python 中的 GPG 对象的构造函数中指定了可执行路径,然后我能够使用脚本成功解密。我得到的提示是 linux 发行版中的构建可能无法在注释部分的 https://pythonhosted.org/python-gnupg/ 中运行。