使用`os.system`调用gpg时如何传递加密消息和密码?
How to pass encrypted message and passphrase when using `os.system` to call gpg?
我在 python 中有一个字符串形式的加密消息。我想用一个叫gpg的程序解密它。
在终端中,使用 gpg 需要:
- gpg --decrypt -a
- 然后它会提示您输入加密的消息
- 然后提示输入私钥。
当加密消息保存在 python 中的变量中时,是否有办法在 python 中完成所有这些操作?我知道您使用 os 模块向其他程序发出终端命令。
import os
import getpass
message = '093j0rawrkj2or2r'
private_key = getpass.getpass()
os.system("gpg --decrypt -a")
...?
要输入加密的字符串,您可以先echo
输出然后输入gpg
命令。
echo <message> | gpg --decrypt ...
要输入密码,有多种方法depending on your env and gpg version。在我的 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
我在 python 中有一个字符串形式的加密消息。我想用一个叫gpg的程序解密它。
在终端中,使用 gpg 需要:
- gpg --decrypt -a
- 然后它会提示您输入加密的消息
- 然后提示输入私钥。
当加密消息保存在 python 中的变量中时,是否有办法在 python 中完成所有这些操作?我知道您使用 os 模块向其他程序发出终端命令。
import os
import getpass
message = '093j0rawrkj2or2r'
private_key = getpass.getpass()
os.system("gpg --decrypt -a")
...?
要输入加密的字符串,您可以先echo
输出然后输入gpg
命令。
echo <message> | gpg --decrypt ...
要输入密码,有多种方法depending on your env and gpg version。在我的 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