Использование python-gnupg для расшифровки файла, зашифрованного с помощью gpg - PullRequest
1 голос
/ 19 марта 2019

У меня есть процесс, который создает симметрично зашифрованный файл с 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 в основном приводит к ошибкам при загрузке и установке ключей.

Этот вопрос SO кажется наиболее близким, но они не используют симметричное шифрование и поэтому сталкиваются с проблемами с сертификатами пользователей и ключами. Как я уже сказал, я могу расшифровать файл с любым пользователем, если у меня есть пароль, поэтому я не думаю , это моя проблема.

Я даже не близок к тому, чтобы быть экспертом по шифрованию файлов, и я уверен, что делаю какое-то неправильное предположение.

Ура!

...