哈希结果是否与源值相同?

Sql*_*yan 4 hash cryptography hash-code-uniqueness hash-collision

这更像是一个加密理论问题,但是哈希算法的结果是否可能与源相同?例如,假设我有一个字符串:

baf34551fecb48acc3da868eb85e1b6dac9de356
Run Code Online (Sandbox Code Playgroud)

如果我得到SHA1哈希,结果是:

4d2f72adbafddfe49a726990a1bcb8d34d3da162
Run Code Online (Sandbox Code Playgroud)

理论上,是否存在这两个值匹配的情况?我不是在这里特别询问SHA1 - 这只是我的例子.我只是想知道是否以这种方式构建散列算法.

Jon*_*eet 8

嗯,这将取决于散列算法 - 但我会惊讶地看到任何明确的阻止这一点.毕竟,这真的不应该.

我怀疑它不太可能发生,当然(对于加密哈希)......但即使它确实如此,也不会引起问题.

对于非加密哈希(在哈希表等中使用),在某些情况下返回源值是完全合理的.例如,在Java中,Integer.hashCode()只返回嵌入的值.