为什么同一个文件在不同文件夹下压缩后 md5 不一致?

2019-12-16 14:53:20 +08:00
 nanoha

win10 环境

想下个游戏补丁但是没法官方下 只能在其他源找了两个 然后比较一下 md5 校验下 由于 md5 不一致所以自己拆看压缩包一点一点对比 最后发现了以下情况

同一个文件 复制一下放在不同位置的文件夹下 比如文件叫 aaa.exe 然后复制后分别放在放在 C:/outer/inner 和 D:/outer/inner

1.直接对两个文件做 md5 计算 结果一样 2.将两个不同位置的 inner 文件夹进行压缩(用的 windows 自带的发送到 zip 压缩)后对压缩后的 inner.zip 进行 md5 计算 结果一样 3.将两个不同位置的 outer 文件夹进行压缩 压缩后的 outer.zip 计算 md5 结果不一样

1 和 2 很好理解 但是 3 是为啥 超出了我的理解

已经勾选了 windows 显示隐藏文件那个 没有任何隐藏文件

4880 次点击
所在节点    程序员
16 条回复
1OF7G
2019-12-16 15:03:01 +08:00
压缩包可能有一些其它冗余信息,比如文件属性或者压缩包的 meta 之类的。
你要对比两个文件夹相同,那应该递归对比里边的所有文件,而不是把文件夹压缩后对比。
nanoha
2019-12-16 15:07:46 +08:00
@1OF7G 我后来确实用 powershell 的命令对比了一下里面的所有文件 md5 一致 但是我挺好奇为啥上面提到的 3 那种情况会发生 如果是压缩会产生一些额外信息的话 为什么情况 2 中的那样单层文件夹压缩的 md5 却是一致的
shijianit
2019-12-16 15:11:56 +08:00
按道理,同一个文件,压缩 2 次,2 个 zip 的 md5 应该也不一样的吧
Rekkles
2019-12-16 15:12:04 +08:00
Mac 系统下面会在文件夹属性里面存在一个 Access Time,每次访问都会 update 会导致属性变化 如果使用 zip 命令加上参数 -X 或者 --no-extra,Win 下面应该也会有类似的属性,建议 google 一下
1OF7G
2019-12-16 15:13:29 +08:00
@nanoha 这个为什么,依赖于压缩软件的实现方式,只有看文档或源码才能解释。有可能的一点是,inner 文件夹的创建 /修改 /访问 等等属性相同,而 outer 的不相同。
nanoha
2019-12-16 15:15:50 +08:00
@shijianit 实际上在 windows 下 上面提到的情况 2 两个的 md5 是一样的。。。
nanoha
2019-12-16 15:17:18 +08:00
@1OF7G 你这么一说我好像有点头绪了 我记得 win7 之后好多文件夹是自带一些属性的(例如多媒体之类的)可能是这个 outer 放在不同位置导致创建时默认的类型不一致(大概。。。
jasonyang9
2019-12-16 15:18:16 +08:00
难不成是吧目录信息带进去了?
nanoha
2019-12-16 15:22:33 +08:00
@jasonyang9 我用的都是 windows 自带的那个右键菜单里面的“发送到-zip 压缩” 按理来说 压缩时使用的参数是一样的 就算真是目录信息不一致 感觉也不能解释情况 2
wangyzj
2019-12-16 15:22:35 +08:00
压缩不仅仅是计算了文件内容把
应该还有创建时间和修改时间吧
毕竟压缩包里面要显示这些信息的
nanoha
2019-12-16 15:26:57 +08:00
@wangyzj 有道理 我记不清当时那个 outer 和 inner 文件夹是创建的还是拖过去的了 可能是 inner 我是拖过去的但是 outer 是新创建的
Vegetable
2019-12-16 15:33:07 +08:00
当然不一样,因为压缩包最起码最起码保存了文件夹创建时间.
Vegetable
2019-12-16 15:33:47 +08:00
~/zip ⌚ 15:32:13
$ unzip -l 2/2.zip
Archive: 2/2.zip
Length Date Time Name
--------- ---------- ----- ----
0 2019-12-16 15:26 a/
0 2019-12-16 15:26 a/1.txt
--------- -------
0 2 files

~/zip ⌚ 15:32:15
$ unzip -l 1/1.zip
Archive: 1/1.zip
Length Date Time Name
--------- ---------- ----- ----
0 2019-12-16 15:25 a/
0 2019-12-16 15:25 a/1.txt
--------- -------
0 2 files
nanoha
2019-12-16 15:37:08 +08:00
@Vegetable 经过你和楼上几位老哥解释明白了 是文件夹信息导致的 我当时只想到目录结构 没考虑到文件夹时间等等问题
cnyang
2019-12-16 15:39:37 +08:00
看是不是系统问题,将硬盘挂载到另外一个系统试下,
我曾经也遇到过,本来以为是硬盘或内存的问题,但弄了半天还是一样,仔细一想系统自带软校验怎么都不可能是硬件问题,然后换了个系统正常了(杀毒没找到,估计是系统内核文件缺失)
crab
2019-12-16 16:07:55 +08:00
压缩的文件保存了 ntfs 时间戳信息

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629477

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX