更改文件名会影响文件的 MD5 哈希吗?
7 回答
“文件的 MD5 散列”的通常定义是散列基于文件内容。名称可以自由更改。
$hash1 = md5(file);
// change file name
$hash2 = md5(file);
这两个哈希码将是相同的。
在某些(相当专业的)用例中,文件元数据(名称、时间戳等)是用于计算散列的数据的一部分。然后
$hash1 = md5(file);
// change file name
$hash2 = md5(file);
将产生两个单独的哈希。
在使用 EXT 文件系统的 Linux 中,它不会,因为文件名不存储在文件中,它存储在文件所在的目录条目(dentry)中,然后将文件的 inode 映射到名称。在 Linux 中更改文件名不会影响其 md5sum。在 Windows 中,我不能确定。
如果哈希是根据文件内容计算的,则不应该。
在 ESXi(确切地说是 ESXi 5.5)中,相同内容但不同文件名的 md5sum 不同。这让我相信 VMFS-5 文件结构也包括文件名。如果我们不关心文件名,有没有办法只检查文件内容的md5sum?我看不到任何选项。有什么建议么?
针对评论,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软件创建的。相同的内容以两个不同的名称导出两次。
1.md5 是根据 FILE 的二进制内容计算的。2.文件名、上次修改时间等都是元数据。md5 并不真正依赖元数据。我已经通过以下步骤对此进行了测试,让我们使用“最后修改的”元数据 i)我创建了一个名为“a.txt”的文件并添加了一些内容并创建了一个哈希,说哈希是“xyz”ii)然后我有只是在文件中添加了一个空格并再次计算哈希说它返回“abc”iii)我刚刚删除了我在步骤(ii)中的更改,再次计算哈希我得到了初始哈希(“xyz”)
这得出结论,即使文件的元数据发生了变化,哈希值仍然保持不变,直到文件内容保持不变。
希望能帮助到你。