【问题标题】:script that asks for password to gpg-sign with default key要求输入密码以使用默认密钥进行 gpg 签名的脚本
【发布时间】:2015-06-15 14:11:42
【问题描述】:

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

[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的内容)

【问题讨论】:

    标签: python gnupg


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2021-12-18
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多