Zip文件包含相同的文件但具有不同的哈希值?

时间:2012-07-22 20:09:44

标签: php zip md5-file

我使用php创建了数百个文件夹和文本文件,然后将它们添加到zip存档中。

这一切都运行正常但如果我使用相同的文件夹和文件创建另一个zip存档,则新存档将与第一个存档具有不同的哈希。如果我使用winrar而不是php来创建存档,这是一样的。

当我压缩我通过php创建的文件时,它似乎只显示不同的哈希值,但它们打开正常。

很奇怪有人对此有所了解吗?

由于

2 个答案:

答案 0 :(得分:6)

文件肯定存在一些差异。如果长度不完全相同,则散列将不同。您可以使用比较十六进制编辑器(例如Hex Workshop)来查看差异究竟是什么。

我想到的可能性:

  1. 正如@orn所提到的,您使用的zip格式可能有一个时间戳(不确定)。
  2. 文件添加到存档的顺序可能不同(取决于您选择它们​​/构建源数组的方式)。

答案 1 :(得分:4)

邮编不是确定性的。为了解决这个zip问题(例如,当您拥有CI并需要更新AWS lambda时,这确实是个问题,并且不想每次都进行更新,而仅是在某些真正更改时才要进行更新),我使用了本文:{{3} }
像这样:

find . -exec touch -t "$(git ls-files -z . | \
  xargs -0 -n1 -I{} -- git log -1 --date=format:"%Y%m%d%H%M" --format="%ad" '{}' | \
  sort -r | head -n 1)" '{}' +
zip -rq -D -X -9 -A --compression-method deflate dest.zip sources...