python gnupg验证文件

问题描述 投票:1回答:1

我不确定为什么这不起作用(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
python gnupg
1个回答
1
投票

终于想通了。将签名写入文件是不够的,您必须关闭然后以只读模式重新打开它。为什么我不知道,但这有效。

© www.soinside.com 2019 - 2024. All rights reserved.