首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和zipfile为两个相同的文件生成不同MD5的档案

Python和zipfile为两个相同的文件生成不同MD5的档案
EN

Stack Overflow用户
提问于 2015-04-29 20:17:43
回答 2查看 1.4K关注 0票数 2

我试图确保两个档案与相同的文件内产生相同的MD5校验和。

例如,file1.txt和file2.txt有相同的内容,它们之间唯一的区别是创建时间。但是,它们产生的MD5是相同的:

代码语言:javascript
复制
>>> 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。

代码语言:javascript
复制
>>> 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不同的创建时间,从而产生了不同的校验和。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-29 20:40:27

虽然两个档案的有效载荷可能是相同的,但档案的底层结构是不同的,压缩只会增加这些差异。

Zip和Tar都是存档格式,它们都可以与压缩相结合;通常它们都是压缩格式。不同的压缩算法和根本不同的底层格式结构的组合将导致不同的MD5s。

--

在这种情况下,上一次修改时间和底层文件的名称是不同的,尽管文件的内容是相同的;这导致了不同的MD5。

票数 1
EN

Stack Overflow用户

发布于 2018-03-13 07:44:45

尝试使用zipfile:

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

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

唯一的动态变量将写入zip文件头,因此zip文件md5将更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29953710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档