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

时间:2019-03-19 16:57:52

标签: python encryption cryptography gnupg

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

gpg --batch --passphrase=mypassphrase -c configure.txt

只要有密码短语,我就可以使用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))

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'
}

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

我一直在研究,直到脸色变蓝为止。甚至现在,我可能已经从各个帮助站点打开了十二个选项卡,其中大多数来自SO。他们全都在做我在做的事情,但不完全是我的解决方案,最终也不是我的解决方案。在stderr中搜索文本主要是导致许多人在下载和安装密钥时出错。

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

我甚至还不是文件加密方面的专家,而且我确定自己做出了某种错误的假设。

干杯!

1 个答案:

答案 0 :(得分:0)

您使用的是以下说明

gpg = gnupg.GPG()

改为在 GPG( ) 中提供 gnupghome(密钥的路径)

gpg = gnupg.GPG(gnupghome='/home/linuxman/.gnupg')

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

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

通常这个路径是主目录