Python:使用GPG和子进程进行对称加密

问题描述 投票:1回答:2

我正在尝试在Python中实现以下bash命令提供的功能。

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模块感兴趣,但也没有想出如何用它复制上面的内容。

提前感谢您的帮助!

python gnupg
2个回答
1
投票

您可以在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。无论哪种方式,您都需要谨慎地在Python中模仿它。


0
投票

[如果有人想知道,我还获得了python-gnupg模块,可用于我的应用程序。我坚持使用subprocess答案,因为这样可以减少依赖关系,但也希望共享。

gpg = gnupg.GPG()                                                                                                                     
encrypted = str(gpg.encrypt(data, recipients=None, symmetric=True, passphrase=key, extra_args=["--batch"])) 
© www.soinside.com 2019 - 2024. All rights reserved.