python gnupg 签名并验证

use*_*479 2 python gnupg

我想看看是否可以让 python-gnupg 模块使用 python 脚本来签名和验证文件。我有以下代码,调用时不会解释任何错误。

然而,当我认为我已经签署了文件()时,代码最后打印出“未验证” example.txt

我一定在文档中遗漏了一些东西,但是在我阅读之后,这就是我想出的用于签名和验证的内容。有什么帮助吗?

import gnupg

gpg = gnupg.GPG(gnupghome="/home/myname") 

stream = open("example.txt", "rb")

signed_data = gpg.sign_file(stream)

verified = gpg.verify_file(stream)

print "Verified" if verified else "Unverified"
Run Code Online (Sandbox Code Playgroud)

kyl*_*uff 5

您的代码存在一些问题,

1.)gpg = gnupg.GPG(gnupghome="/home/myname")需要gpg = gnupg.GPG(gnupghome="/home/myname/.gnupg")

2.) 您正在尝试使用 来验证流verify_file(stream),但是该流仍然是原始未签名文件的句柄。您首先需要将签名数据写入新文件并调用verify_file()该文件的句柄,或者验证结果sign_file

下面是演示的一个工作示例,使用了 sign_file 的结果 - 但在我们开始之前,解决脚本中发生的问题的方法是,您可以在 gnupg 方法返回的对象上查看 stderr 的输出。例如,您可以通过打印查看签名数据的结果signed_data.stderr。方法的返回也是如此verify_file

进入代码 -

import gnupg

gpg = gnupg.GPG(gnupghome="/home/myname/.gnupg")

stream = open("example.txt", "rb")

signed_data = gpg.sign_file(stream)

verified = gpg.verify(signed_data.data)

print "Verified" if verified else "Unverified"
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!