Как передать зашифрованное сообщение и пароль при использовании `os.system` для вызова gpg? - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть зашифрованное сообщение в виде строки в Python. Я хочу расшифровать его с помощью программы gpg.

В терминале, для использования gpg требуется:

  1. gpg --decrypt -a
  2. Затем он запрашивает зашифрованное сообщение
  3. Затем запрашивается закрытый ключ.

enter image description here

Есть ли способ сделать все это в python, когда зашифрованное сообщение сохраняется в переменной в python? Я знаю, что вы используете модуль os для создания команд терминала для других программ.

import os
import getpass
message = '093j0rawrkj2or2r'
private_key = getpass.getpass()
os.system("gpg --decrypt -a")
...?

1 Ответ

0 голосов
/ 21 апреля 2019

Чтобы ввести зашифрованную строку, вы можете echo сначала вывести ее, а затем передать в команду gpg.

echo <message> | gpg --decrypt ...

Для ввода ключевой фразы есть несколько способов в зависимости от вашей версии env и gpg .То, что работало на моей Ubuntu 18.04.2 с gpg 2.2.4 , заключалось в использовании --pinentry-mode=loopback, а затем в --passphrase:

gpg --decrypt -a --pinentry-mode=loopback --passphrase="yourpassphrase" 

Pythonкод будет выглядеть примерно так:

import os

message = '093j0rawrkj2or2r'
command = "echo '{}' | gpg --decrypt -a --pinentry-mode=loopback --passphrase=yourpassphrase".format(message)
os.system(command)

Но указание фактического --passphrase-yourpassphrase очень небезопасно.Другой вариант - поместить фразу-пароль в какой-нибудь файл, а затем использовать опцию --passphrase-file.

import os

message = '093j0rawrkj2or2r'
command = "echo '{}' | gpg --decrypt -a --pinentry-mode=loopback --passphrase-file=yourpassphrasefile".format(message)
os.system(command)

Я не знаю, где вы получили зашифрованное сообщение, но я обычно работаю с зашифрованными файлами .Если зашифрованный ввод взят из файла, просто замените echo <string> на cat <filepath>:

cat somefile.txt | gpg --decrypt -a --pinentry-mode=loopback --passphrase-file=yourpassphrasefile
...