Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 请求使用默认密钥进行gpg签名的密码的脚本_Python_Gnupg - Fatal编程技术网

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
的输出,它应该列出(在其他配置选项中)配置的默认键