我正在尝试使用 python-gnupgp
对文件进行 gpg 签名。
这应该很简单:
我的代码很简单:
import gnupg
import sys
gpg = gnupg.GPG()
stream = open(sys.argv[1], "rb")
signed_data = gpg.sign_file(stream)
print("signed data: %s" % (signed_data.data))
print("stderr: %s" % (signed_data.stderr))
现在上面的代码不起作用,因为我没有向 gpg.sign_file()
提供密码,并且 gnupg 不能要求它,如错误所示:
signed data: b''
stderr: [GNUPG:] USERID_HINT 1234567890ABCDEF me myself <me@example.com>
[GNUPG:] NEED_PASSPHRASE 1234567890ABCDEF 1234567890ABCDEF 1 0
gpg: Sorry, no terminal at all requested - can't get input
根据 this question/answer 的说法,问题可能是默认 GPG 选项中有 no-tty
。
现在我认为 no-tty
选项有意义,我想提供一种方法来请求密码,然后将其提供给 sign_file
调用.
在最简单的情况下,类似于:
import getpass
pw=getpass.getpass()
signed_data=gpg.sign_file(stream, passphrase=pw)
不,我的问题是,我想告诉用户,他们被要求输入哪个 key 的密码。 像
print("Please enter the passphrase for key %s" % defaultkey_id)
pw=getpass.getpass()
结果出乎意料地难以做到,因为我还没有找到查询默认 key ID 的方法。一个简单的 gpg.list_keys(True)[0]
给出一个随机私钥(当然不是随机的;很可能是第一个添加到 key 环中的私钥;但这不一定是默认 key )。
所以我想我真正的问题是:我怎样才能找出用于签名的默认 key ,这样我就可以要求用户提供这个 key 的密码?
(我不想解析$GNUPGHOME/gpg.conf
的内容)
最佳答案
如果你有可用的 gpgconf,你可以解析 gpgconf gpg
的输出,它应该列出(在其他配置的选项中)配置的默认 key 。
关于python - 要求使用默认 key 进行 gpg 签名的密码的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847395/