Python: Symmetri c Шифрование с GPG и подпроцессом - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь добиться функциональности, предоставляемой следующей командой bash в Python.

echo "$DATA" | gpg --symmetric --armor --batch --passphrase "${KEY}"

До сих пор я пытался использовать subprocess, но у меня возникают трудности при передаче данные. Я попытался дать его в виде команды в списке параметров для отправки на subprocess, но это просто полностью повторяет все это.

cmd = f"| gpg --symmetric --armor --batch --passphrase {key}".split()                                                  
temp = ["echo", f"\"{data}\""]
temp.extend(cmd)                                                                                                                      
res = subprocess.run(temp, stdout=subprocess.PIPE, universal_newlines=True)                                                          
encrypted = res.stdout.strip()

Я также заинтересован в использовании модуля python -gnupg , но еще не выяснил, как повторить вышеописанное с ним.

Заранее спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 26 марта 2020

На случай, если кому-то интересно, у меня также есть модуль python-gnupg для моего приложения. Я придерживаюсь ответа subprocess, поскольку это уменьшает зависимости, но также хотел поделиться этим.

gpg = gnupg.GPG()                                                                                                                     
encrypted = str(gpg.encrypt(data, recipients=None, symmetric=True, passphrase=key, extra_args=["--batch"])) 
1 голос
/ 26 марта 2020

Вы можете использовать аргумент input для run() / check_output():

from getpass import getpass
import subprocess

key = getpass("KEY: ")
data = b'Symmetric Encryption with GPG and Subprocess'
command = ["gpg", "--symmetric", "--armor", "--batch", "--passphrase", key]

out = subprocess.check_output(command, input=data, universal_newlines=False)

Обратите внимание, что GNU echo по умолчанию добавит новую строку. Используйте echo -n, чтобы не печатать конечный \n. В любом случае, вы должны быть осторожны, чтобы имитировать c это в Python.

...