为了账号安全,请及时绑定邮箱和手机立即绑定

蟒蛇:使用 GPG 和子进程的对称加密

蟒蛇:使用 GPG 和子进程的对称加密

慕尼黑8549860 2022-09-13 20:09:07
我正在尝试实现Python中的以下bash命令提供的功能。echo "$DATA" | gpg --symmetric --armor --batch --passphrase "${KEY}"到目前为止,我尝试使用,但很难传递数据。我尝试在要发送到的参数列表中将其作为命令给出,但这实际上与整个事情相呼应。subprocesssubprocesscmd = 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模块感兴趣,但还没有弄清楚如何用它复制上述内容。提前感谢您的任何帮助!
查看完整描述

3 回答

?
慕的地8271018

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


查看完整回答
反对 回复 2022-09-13
?
慕村225694

TA贡献1880条经验 获得超4个赞

如果有人想知道,我也得到了模块为我的应用程序工作。我坚持这个答案,因为这减少了依赖性,但也想分享这一点。python-gnupgsubprocess


gpg = gnupg.GPG()                                                                                                                     

encrypted = str(gpg.encrypt(data, recipients=None, symmetric=True, passphrase=key, extra_args=["--batch"])) 



查看完整回答
反对 回复 2022-09-13
?
开满天机

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源代码中包含了这个非常高级的模块的文档,但此处提供了在线草稿版本。


查看完整回答
反对 回复 2022-09-13
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号