python gnupg 验证文件

标签 python gnupg

我不确定为什么这不起作用(Python 2.7.5) - 在临时目录中创建的文件我可以验证,但 python 不会。帮忙?

我不确定我是否使用了 gpg.verify_file 函数错误,或者我是否不理解告诉 python 我信任正在导入的 key 的正确方法,或者什么。当我打开 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 验证文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54841911/

相关文章:

python - importlib.import_module 在 python3.5 中有奇怪的行为

python - 从索引到列级别交换一级(Pandas Multiindex Dataframe)

Python 字符串到 int/float [pandas/使用 BeautifulSoup 进行网页抓取]

Python - 检查系统是 32 位还是 64 位以确定是否运行函数?

encryption - 使用命令行对文件夹进行GPG加密和解密

python - 解密电子邮件中附加的 gpg 文件 (file.pgp)

python - 使用来自非 python 的 pickle 二进制格式(使用 celery 和 rabbitmq)

android - BouncyCaSTLe:Android:不支持的类文件主要版本 59。无法转换 bcprov-jdk15on-1.67.jar (org.bouncycaSTLe:bcprov-jdk15on:1.67)

pgp - 如何在不使用本地存储(在 ~/.gpg 下)的情况下从 gpg 中的私有(private)获取公钥?

git - Git-encrypt 中的错误加密实践?