创建ZipFile的MD5哈希

时间:2016-09-01 16:05:49

标签: python

我想创建ZipFile的MD5哈希,而不是其中的一个文件。但是,ZipFile个对象不容易转换为流。

from hashlib import md5
from zipfile import ZipFile

zipped = ZipFile(r'/Foo/Bar/Filename.zip')
hasher = md5()
hasher.update(zipped)

return hasher.hexdigest()

以上代码生成错误:TypeError: must be convertible to a buffer, not ZipFile

是否有将ZipFile转换为流的简单方法?

这里没有安全问题,我只需要一个简单快捷的方法来确定我以前是否看过文件。 hash(zipped)效果很好,但如果可能,我会更喜欢更健壮的东西。

2 个答案:

答案 0 :(得分:6)

只需将ZipFile作为常规文件打开即可。以下代码适用于我的机器。

from hashlib import md5
m = md5()
with open("/Foo/Bar/Filename.zip", "rb") as f:
    data = f.read() #read file in chunk and call update on each chunk if file is large.
    m.update(data)
    print m.hexdigest()

答案 1 :(得分:3)

此函数应返回任何文件的MD5哈希值,前提是它的路径(需要pycrypto模块):

from Crypto.Hash import MD5


def get_MD5(file_path):

    chunk_size = 8192

    h = MD5.new()

    with open(file_path, 'rb') as f:
        while True:
            chunk = f.read(chunk_size)
            if len(chunk):
                h.update(chunk)
            else:
                break

    return h.hexdigest()

print get_MD5('pics.zip') # example

<强>输出:

6a690fa3e5b34e30be0e7f4216544365

Info on pycrypto