3 回答

TA贡献1796条经验 获得超4个赞
可以将 参数用于 /:inputrun()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 将附加一个换行符。用于不打印尾随 。无论哪种方式,您都需要小心地在Python中模仿这一点。echoecho -n\n

TA贡献1880条经验 获得超4个赞
如果有人想知道,我也得到了模块为我的应用程序工作。我坚持这个答案,因为这减少了依赖性,但也想分享这一点。python-gnupgsubprocess
gpg = gnupg.GPG()
encrypted = str(gpg.encrypt(data, recipients=None, symmetric=True, passphrase=key, extra_args=["--batch"]))

TA贡献1786条经验 获得超13个赞
该模块具有悠久的历史,存在严重的安全漏洞,其中许多漏洞更有可能受到影响,因为决定使用调用外部二进制可执行文件。python-gnupgsubproess
相反,GnuPG 项目的建议是将 CPython 绑定用于 GPGME C API,该接口随 GPGME 源代码一起提供。
import gpg
from getpass import getpass
key = getpass("KEY: ")
c = gpg.Context(armor=True)
data = b"Symmetric encryption with GPGME."
ciphertext, result, sign_result = c.encrypt(data, sign=False, passphrase=key)
with open("some_file.txt.asc", "wb") as f:
f.write(ciphertext)
由于这使用对称加密,因此不会包含数字签名,并且没有要检查的收件人密钥。这意味着两者都会返回。只包含任何内容,那就是ASCII装甲的excrypted数据,可以如上所述写入文件,也可以用它做其他事情。resultsign_resultNoneciphertext
GPGME源代码中包含了这个非常高级的模块的文档,但此处提供了在线草稿版本。
添加回答
举报