Python 请求使用默认密钥进行gpg签名的密码的脚本
我正在尝试使用Python 请求使用默认密钥进行gpg签名的密码的脚本,python,gnupg,Python,Gnupg,我正在尝试使用pythongnupgp对文件进行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&
pythongnupgp
对文件进行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\u提示1234567890ABCDEF我自己
[GNUPG:]需要密码短语1234567890ABCDEF 1234567890ABCDEF 1 0
gpg:抱歉,根本没有请求终端-无法获取输入
根据该问题,默认GPG选项中可能存在默认的无tty
现在我认为no tty
选项是有意义的,我想提供一种方法来请求密码短语,然后将其提供给sign\u文件
调用
在最简单的情况下,类似于:
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\u keys(True)[0]
会给出一个随机私钥(很可能不是随机的;很可能是添加到密钥环中的第一个私钥;但不一定是默认密钥)
所以我想我真正的问题是:我怎样才能知道签名时使用的默认密钥是什么,这样我就可以问用户这个密钥的密码短语了
(我不想解析
$GNUPGHOME/gpg.conf
的内容)如果您有可用的gpgconf,您可以解析gpgconf gpg
的输出,它应该列出(在其他配置选项中)配置的默认键