在Python中生成多个文件的一个MD5 / SHA1校验和

时间:2016-01-15 09:03:43

标签: python hash md5 sha1 checksum

我已经查看了几个关于在Python中计算文件校验和的主题,但没有一个回答有关多个文件中一个总和的问题。我在子目录中有几个文件,并想确定其中一个或多个是否有任何更改。 有没有办法从多个文件生成一个总和?

编辑: 这是我获取总和列表的方式:

checksums = [(fname, hashlib.md5(open(fname, 'rb').read()).digest()) for fname in flist]

2 个答案:

答案 0 :(得分:2)

所以我做到了:)这样就为文件列表生成了一个哈希值。

hash_obj = hashlib.md5(open(flist[0], 'rb').read())
for fname in flist[1:]:
    hash_obj.update(open(fname, 'rb').read())
checksum = hash_obj.digest()

感谢PM 2Ring的输入!

请注意,md5已被破解,因此仅将其用于非安全性关键用途。

答案 1 :(得分:2)

比Artur的回答略干净。无需特别对待第一个元素。

def calculate_checksum(filenames):
    hash = hashlib.md5()
    for fn in filenames:
        if os.path.isfile(fn):
            hash.update(open(fn, "rb").read())
    return hash.digest()

(您可以根据需要删除os.path.isfile()。)