96

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

4

7 回答 7

219

不,哈希只是文件内容。您可以在源代码md5sum及其MD5 实现中看到这一点。如果您有权访问,也可以对此进行测试md5sum

$ echo "some arbitrary content" > file1
$ cp file1 file2
$ md5sum file1
f0007cbddd79de02179de7de12bec4e6  file1
$ md5sum file2
f0007cbddd79de02179de7de12bec4e6  file2
$
于 2013-01-16T14:38:08.733 回答
33

“文件的 MD5 散列”的通常定义是散列基于文件内容。名称可以自由更改。

$hash1 = md5(file);
// change file name
$hash2 = md5(file);

这两个哈希码将是相同的。

在某些(相当专业的)用例中,文件元数据(名称、时间戳等)是用于计算散列的数据的一部分。然后

$hash1 = md5(file);
// change file name
$hash2 = md5(file);

将产生两个单独的哈希。

于 2011-02-20T03:57:13.353 回答
6

在使用 EXT 文件系统的 Linux 中,它不会,因为文件名不存储在文件中,它存储在文件所在的目录条目(dentry)中,然后将文件的 inode 映射到名称。在 Linux 中更改文件名不会影响其 md5sum。在 Windows 中,我不能确定。

于 2013-09-17T19:03:01.220 回答
0

如果哈希是根据文件内容计算的,则不应该。

于 2011-02-20T03:55:35.743 回答
0

在 ESXi(确切地说是 ESXi 5.5)中,相同内容但不同文件名的 md5sum 不同。这让我相信 VMFS-5 文件结构也包括文件名。如果我们不关心文件名,有没有办法只检查文件内容的md5sum?我看不到任何选项。有什么建议么?

于 2014-06-04T11:09:49.653 回答
-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软件创建的。相同的内容以两个不同的名称导出两次。

于 2019-12-22T14:30:50.777 回答
-2

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

这得出结论,即使文件的元数据发生了变化,哈希值仍然保持不变,直到文件内容保持不变。

希望能帮助到你。

于 2019-04-24T10:01:30.693 回答