我正在尝试使用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无法请求它,因为错误表明:
签名数据:b''
stderr:[GNUPG:] USERID_HINT 1234567890ABCDEF我自己< me@example.com>
[GNUPG:] NEED_PASSPHRASE 1234567890ABCDEF 1234567890ABCDEF 1 0
gpg:抱歉,没有终端请求 - 无法获得输入
根据this question/answer,问题可能默认为默认GPG选项中包含no-tty
。
现在我认为no-tty
选项有意义,我想提供一种方法来询问密码,然后将其提供给sign_file
来电。
在最简单的情况下,例如:
import getpass
pw=getpass.getpass()
signed_data=gpg.sign_file(stream, passphrase=pw)
没有我的问题,我想告诉用户,他们被要求使用哪个密钥的密码。
之类的东西print("Please enter the passphrase for key %s" % defaultkey_id)
pw=getpass.getpass()
这令人惊讶地难以做到,因为我还没有找到一种方法来查询默认密钥的ID。一个简单的gpg.list_keys(True)[0]
给出一个随机私钥(好吧不是随机的;很可能是第一个添加到密钥环;但不一定是默认密钥)。
所以我想我的真正问题是:如何找出用于签名的默认密钥,以便我可以要求用户输入密钥的密码?
(我宁愿不解析$GNUPGHOME/gpg.conf
)
答案 0 :(得分:1)
如果你有gpgconf可用,你可以解析gpgconf gpg
的输出,它应该列出(在其他配置的选项中)配置的默认密钥。