更改文件名会影响文件的MD5哈希吗?


Answers:


31

仅当文件名称包含在哈希计算中时。例如,用伪代码:

$hash1 = md5(contents of file);
$hash2 = md5(name of file + contents of file);

将产生两个单独的哈希。


20
问题是询问CLI工具“ md5sum”,而不是一般的算法。
jameshfisher 2013年

205

不,哈希仅是文件内容的哈希。您可以在此看到的来源md5sum它的MD5实现。如果您可以访问md5sum

$ echo "some arbitrary content" > file1
$ cp file1 file2
$ md5sum file1
f0007cbddd79de02179de7de12bec4e6  file1
$ md5sum file2
f0007cbddd79de02179de7de12bec4e6  file2
$

18
这应该是答案。该问题被标记为“ md5sum”。
ingyhere 2013年

3
感谢您的直接答复。
艾迪乙

完善!我没有Linux可以尝试。但是我确实有Stackoverflow :)
Faizan

您不需要使用Linux就可以知道这一点。您可以在MacOSX或Windows上产生相同的结果。
亚历山德拉·穆拉蒂尼奥

1
如果有人在寻找类似@alexandreMulatinho的Windows,则将其替换为fciv和cp的md5sum和cp,它的工作原理相同。如果然后输入Linux的Windows子系统,则md5sum哈希与fciv哈希匹配。
杰克·史蒂文斯-哈斯

4

在使用EXT文件系统的Linux中,由于文件名未存储在文件中,因此不会存储在文件所在的目录项(牙科)中,然后文件的inode映射到名称。在Linux中更改文件名不会对其md5sum产生影响。在Windows中,我不确定。


3
Windows文件系统也不将文件名存储在文件中。一个简单的端口md5sum应该表现出预期的效果。
MauganRa


0

在ESXi(准确地说是ESXi 5.5)中,相同内容但不同文件名的md5sum不同。这使我相信VMFS-5文件结构也包含文件名。如果我们不关心文件名,是否可以仅检查文件内容的md5sum?我看不到任何选择。有什么建议?


您正在谈论哪些文件?虚拟磁盘映像(.vmdk)?在vmdk标头中,有一些数据可能取决于文件名和位置。您如何在测试中重命名文件?---否则,从文件内容的角度来看,VMFS是普通的文件系统,并且文件的内容不直接取决于其名称。
pabouk

-1

回应评论,https : //stackoverflow.com/a/14360831/9392847

仅当一个文件是另一文件的副本时,此方法才有效,但当生成具有相同名称的两个不同名称的不同文件时,则无效。我已经试过了:

nancy@nancy:~/Documents$ md5sum /home/nancy/Documents/1test.pdf
c5a445b7186dfb220ea79d2001acf3f1  /home/nancy/Documents/1test.pdf
nancy@nancy:~/Documents$ md5sum /home/nancy/Documents/2test.pdf
cefa063abf0c0a9e80b2b75e70100836  /home/nancy/Documents/2test.pdf

文件1test.pdf和2test.pdf都是使用gimp软件创建的。同一内容使用两个不同的名称导出两次。


这意味着文件内容不完全相同...该程序必须在每个文件中导出不同的元数据
Milney19,19年

-2

1.md5是基于FILE的二进制内容计算的。2.文件名,最后修改的东西等都是元数据。md5并不真正依赖元数据。我已经按照以下步骤进行了测试,可以使用“上次修改的”元数据。i)我创建了一个名为“ a.txt”的文件,并添加了一些内容,并创建了一个哈希,例如哈希为“ xyz” ii)刚刚在文件中添加了一个空格,然后再次计算了哈希值,说它返回了“ abc”。iii)我刚刚在步骤(ii)中删除了更改,再次计算哈希值时,我得到了初始哈希值(“ xyz”)

得出的结论是,即使文件的元数据已更改,哈希也保持不变,直到文件内容保持不变。

希望能帮助到你。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.