使用 python-gnupg 解密用 gpg 加密的文件

Tra*_*erb 6 python encryption cryptography gnupg

我有一个使用 gpg 创建对称加密文件的过程:

gpg --batch --passphrase=mypassphrase -c configure.txt
Run Code Online (Sandbox Code Playgroud)

gpg只要我有密码,我就可以对任何用户解密加密文件。这正如预期的那样。

然后我运行了一个 python 服务,它定期下载这个文件,解密它,并使用定义的配置。好吧,它应该解密它,但事实并非如此。这是一个代码清单:

import urllib.request
import gnupg

gpg = gnupg.GPG()
key = 'mypassphrase'
response = urllib.request.urlopen('http://www.example.org/configure.txt.gpg')
encrypted_file = response.read()
file = gpg.decrypt(encrypted_file, passphrase=key)

print(str(file))
Run Code Online (Sandbox Code Playgroud)

print是空白。如果我检查file对象,我会看到这些属性:

{
    '_gpg': <gnupg.gnupg.GPG object at 0x7f3d84675a90>,
    'valid': False,
    'status': 'decrypt 4294967295',
    'fingerprint': None,
    'pubkey_fingerprint': None,
    'key_id': None,
    'signature_id': None,
    'creation_date': None,
    'timestamp': None,
    'sig_timestamp': None,
    'username': None,
    'expire_timestamp': None,
    'trust_level': None, 
    'trust_text': None, 
    'subpackets': {}, 
    'notations': {}, 
    '_last_notation_name': None, 
    'data': b'', 
    'ok': False, 
    'data_format': None, 
    'data_timestamp': None, 
    'data_filename': None, 
    'stderr': 'gpg: no valid OpenPGP data found.\n[GNUPG:] NODATA 1\n[GNUPG:] NODATA 2\n[GNUPG:] FAILURE decrypt 4294967295\ngpg: decrypt_message failed: Unknown system error\n'
}
Run Code Online (Sandbox Code Playgroud)

我也试过直接打开文件并跳过urlopen,以防传输出现问题。但是,结果encrypted_file显示相同的字节,最终显示相同的错误和空结果。

我一直在研究这个,直到我脸色发青。即使是现在,我也可能从各种帮助站点打开了十几个选项卡,其中大部分来自 SO。他们所有人都在做我正在做的事情,但不完全是,最终也不是我的解决方案。搜索文本stderr主要导致很多人在下载和安装密钥时出错。

这个 SO question似乎最接近,但他们没有使用对称加密,因此他们遇到了用户证书和密钥问题。就像我说的,只要我有密码,我就可以与任何用户解密文件,所以我认为这不是我的问题。

我什至离成为文件加密专家还差得很远,而且我确信我做出了某种错误的假设。

干杯!

use*_*773 0

您正在使用以下说明

gpg = gnupg.GPG()
Run Code Online (Sandbox Code Playgroud)

相反,在 GPG( ) 中提供 gnupghome(密钥路径)

gpg = gnupg.GPG(gnupghome='/home/linuxman/.gnupg')
Run Code Online (Sandbox Code Playgroud)

其中'/home/linuxman/.gnupg'是列出密钥的路径。

使用gpg --list-keys(或)gpg --list-secret-keys查找密钥以及列出密钥的路径

通常此路径将是主目录