如果文件名更改,文件的哈希值是否会更改?

tar*_*yte 16 hashsum

如果文件名、路径、时间戳或权限发生变化,文件的哈希值是否会发生变化?

$ echo some contents > testfile
$ shasum testfile 
3a2be7b07a1a19072bf54c95a8c4a3fe0cdb35d4  testfile
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 21

文件的哈希值是其内容的哈希值。文件名、时间戳、权限等元数据对哈希没有影响。

假设一个未破坏的加密散列,两个文件具有相同的散列当且仅当它们具有相同的内容。最常见的此类哈希是 SHA-2 系列(SHA-256、SHA-384、SHA-512)和 SHA3 系列。这不包括被破坏的 MD5 或 SHA-1,也不包括cksum不是加密哈希的 CRC 。

  • 一般来说,所有的哈希都有冲突。未损坏的加密散列意味着没有产生冲突的有效方法。 (7认同)
  • 你说的都是假的。每个(实用的)散列函数,即使是未损坏的加密函数,都有冲突。输入多于输出,所以根据鸽巢原理,必然有碰撞。 (4认同)
  • 语句“如果您有两个具有相同散列的文件,并且该散列是未破坏的加密散列,那么当且仅当这两个文件具有相同的内容时,它们具有相同的散列。” 相当于“未损坏的加密哈希 [函数] 没有冲突”。我同意“实际上,如果您有两个具有相同 SHA-256 哈希的文件,则它们具有相同的内容。” (2认同)

tar*_*yte 13

就我在简单测试后所能判断的程度而言。

$ echo some contents > testfile
$ shasum testfile 
3a2be7b07a1a19072bf54c95a8c4a3fe0cdb35d4  testfile
$ mv testfile newfile
$ shasum newfile 
3a2be7b07a1a19072bf54c95a8c4a3fe0cdb35d4  newfile
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,如果您盲目比较 `shasum` 的输出,它们将不匹配,因为输出包含文件名/路径(如您的示例所示)。一个好的解决方法是做类似`shasum - < testfile`的事情。 (3认同)