我不确定为什么这不起作用(Python 2.7.5) - 在temp目录中创建的文件我可以验证,但python不会。救命?
我不确定我是否使用gpg.verify_file函数错误,或者如果我不理解告诉python的正确方法我相信正在导入的密钥,或者是什么。当我打开我的shell并进入临时目录时,我可以根据sig验证文件,所以我知道它应该验证。
不幸的是,99%的Python GnuPG示例都有加密,但事实并非如此。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
import gnupg
import tempfile
import shutil
from pprint import pprint
def getStartTlsPolicy():
policyURL = 'https://dl.eff.org/starttls-everywhere/policy.json'
policyASC = 'https://dl.eff.org/starttls-everywhere/policy.json.asc'
publicKEY = 'https://dl.eff.org/starttls-everywhere/public-key.txt'
try:
response = urllib2.urlopen(policyURL, timeout=5)
except:
return '{}'
try:
signature = urllib2.urlopen(policyASC, timeout=5)
except:
return '{}'
try:
keyblock = urllib2.urlopen(publicKEY, timeout=5)
except:
return '{}'
jsondata = response.read()
sigdata = signature.read()
keyfile = keyblock.read()
# GnuPG stuff here
dirpath = tempfile.mkdtemp()
gpg = gnupg.GPG(gnupghome=dirpath)
gpg.encoding = 'utf-8'
sigfile = open(dirpath + '/policy.json.asc', 'w+')
sigfile.write(sigdata)
jsonfile = open(dirpath + '/policy.json', 'w+')
jsonfile.write(jsondata)
jsonfile.close()
fingerlist = []
fingerlist.append('B693F33372E965D76D55368616EEA65D03326C9D')
gpg.import_keys(keyfile)
gpg.trust_keys(fingerlist, 'TRUST_FULLY')
verified = gpg.verify_file(sigfile, dirpath + '/policy.json', 'key_id=842AEA40C5BCD6E1')
if not verified:
print "signature verify failed"
public_keys = gpg.list_keys()
pprint(public_keys)
sigfile.close()
#shutil.rmtree(dirpath)
print dirpath
return '{}'
sigfile.close()
shutil.rmtree(dirpath)
return jsondata
jsondata = getStartTlsPolicy()
print jsondata
终于想通了。将签名写入文件是不够的,您必须关闭然后以只读模式重新打开它。为什么我不知道,但这有效。