3 回答

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊
可以將 參數(shù)用于 /: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)
請注意,默認(rèn)情況下,GNU 將附加一個換行符。用于不打印尾隨 。無論哪種方式,您都需要小心地在Python中模仿這一點。echoecho -n\n

TA貢獻(xiàn)1880條經(jīng)驗 獲得超4個贊
如果有人想知道,我也得到了模塊為我的應(yīng)用程序工作。我堅持這個答案,因為這減少了依賴性,但也想分享這一點。python-gnupgsubprocess
gpg = gnupg.GPG()
encrypted = str(gpg.encrypt(data, recipients=None, symmetric=True, passphrase=key, extra_args=["--batch"]))

TA貢獻(xiàn)1786條經(jīng)驗 獲得超13個贊
該模塊具有悠久的歷史,存在嚴(yán)重的安全漏洞,其中許多漏洞更有可能受到影響,因為決定使用調(diào)用外部二進(jìn)制可執(zhí)行文件。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)
由于這使用對稱加密,因此不會包含數(shù)字簽名,并且沒有要檢查的收件人密鑰。這意味著兩者都會返回。只包含任何內(nèi)容,那就是ASCII裝甲的excrypted數(shù)據(jù),可以如上所述寫入文件,也可以用它做其他事情。resultsign_resultNoneciphertext
GPGME源代碼中包含了這個非常高級的模塊的文檔,但此處提供了在線草稿版本。
添加回答
舉報