使用默认密钥向gpg-sign请求密码的脚本

时间:2015-06-15 14:11:43

标签: python gnupg

我正在尝试使用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

的内容

1 个答案:

答案 0 :(得分:1)

如果你有gpgconf可用,你可以解析gpgconf gpg的输出,它应该列出(在其他配置的选项中)配置的默认密钥。