解压并重新压缩文件会产生不同的哈希值

解压并重新压缩文件会产生不同的哈希值

我有一个名为 robot.ev3 的 ev3 文件,当我运行file它时,我得到的输出是,我使用解robot.ev3: Zip archive data, at least v2.0 to extract压缩文件,然后使用 压缩文件unzip robot.ev3 -d robotrobotzip -r ../robotx.ev3 *

当我运行时,md5sum robot.ev3 robotx.ev3得到的输出是:

31bf1fb8767707cd476c425ab7cf2a5a robot.ev3
7298c1ec0467672cf5e210f945261ae2 robotx.ev3

我尝试对我创建的文件而不是由创建的文件执行相同的过程,LEGO MINDSTORMS EV3 Home Edition并且哈希值是相同的。

为什么 ev3 文件的哈希值不同?

答案1

因为 ZIP 文件包含文件名。因此,如果你更改压缩文件的名称,这会更改 ZIP 中的数据,从而更改 ZIP 文件的哈希值。

示例:创建示例文件

>>>echo "
> 
> Because the ZIP file contains the file name. So if you change the name of the zipped files this changes the data in the ZIP, and therefore the hash of the ZIP file.
> " >data1.txt

复制文件,保留时间戳(对于 ZIP,仅计算修改时间)

>>>cp -p data1.txt data2.txt  

检查我们是否有相同的文件

>>>ll data*.txt
-rw-r--r-- 1 me me 168 May 17 15:27 data1.txt
-rw-r--r-- 1 me me 168 May 17 15:27 data2.txt
>>>md5sum data*.txt
bf9c51a337186ff5c144177de7f84c00  data1.txt
bf9c51a337186ff5c144177de7f84c00  data2.txt

创建 ZIP

>>>zip data1.zip data1.txt
updating: data1.txt (deflated 34%)
>>>zip data2.zip data2.txt
updating: data2.txt (deflated 34%)

邮政编码不同

>>>md5sum data*.zip
50eb0d7a660833169b9856bd6eab5011  data1.zip
e16d9e4ae07aa521857552eaec6610b5  data2.zip

相反,将同一个文件压缩两次到两个不同的 ZIP 中会创建具有相同哈希值的相同 ZIP:

>>>zip data1B.zip data1.txt
updating: data1.txt (deflated 34%)
>>>md5sum data1*.zip
50eb0d7a660833169b9856bd6eab5011  data1B.zip
50eb0d7a660833169b9856bd6eab5011  data1.zip

要比较 ZIP 文件,最好先解压它们,除非你使用某些东西将它们作为设备安装。我以前花了一些时间比较 EAR 文件(EAR 文件是 WAR 文件 ZIP 文件,WAR 文件本身是 JAR 文件 ZIP 文件,JAR 文件本身是 .class java 文件 ZIP 文件)。

相关内容