我试图确保两个档案与相同的文件内产生相同的MD5校验和。
例如,file1.txt和file2.txt有相同的内容,它们之间唯一的区别是创建时间。但是,它们产生的MD5是相同的:
>>> import md5
>>> md5.md5(open("file1.zip","rb").read()).hexdigest()
'c99e47de6046f141693b9aecdbdd2dc2'
>>> md5.md5(open("file2.zip","rb").read()).hexdigest()
'c99e47de6046f141693b9aecdbdd2dc2'但是,当我为两个相同的文件创建tarfile (或zipfile)存档时,我得到了完全不同的MD5s。注意,我以完全相同的方式对文件1和2使用tarfile。
>>> import tarfile, md5
>>> #file 1
>>> a1 = tarfile.open('archive1.tar.gz','w:gz')
>>> a1.add("file1.txt")
>>> a1.close()
>>> md5.md5(open("archive1.zip","rb").read()).hexdigest()
'0865abb94f6fd92df990963c75519b2e'
>>> #file 2
>>> a2 = tarfile.open('archive2.tar.gz','w:gz')
>>> a2.add("file2.txt")
>>> a2.close()
>>> md5.md5(open("archive2.zip","rb").read()).hexdigest()
'cee53e271a1f457dfd5b5401d8311fcc'知道为什么会发生这种事吗?我猜这与导致这种情况的归档文件中的头数据有关。也许档案维护了file1和file2不同的创建时间,从而产生了不同的校验和。
发布于 2015-04-29 20:40:27
虽然两个档案的有效载荷可能是相同的,但档案的底层结构是不同的,压缩只会增加这些差异。
Zip和Tar都是存档格式,它们都可以与压缩相结合;通常它们都是压缩格式。不同的压缩算法和根本不同的底层格式结构的组合将导致不同的MD5s。
--
在这种情况下,上一次修改时间和底层文件的名称是不同的,尽管文件的内容是相同的;这导致了不同的MD5。
发布于 2018-03-13 07:44:45
尝试使用zipfile:

关键点:给一个ZipInfo的对象,而不是str。

因为如果不是ZipInfo的一个对象,zinfo将得到一个动态date_time。

唯一的动态变量将写入zip文件头,因此zip文件md5将更改。
https://stackoverflow.com/questions/29953710
复制相似问题