如果将相同的盐用于唯一输入,那么散列算法是否保证唯一输出?

时间:2011-05-24 21:30:30

标签: java encryption hash

我们可以看到一个系统,该系统使用唯一ID的值,我们要与之共享信息的另一家公司将不接受。我正在考虑使用类似于密码的单向加密哈希。关注的是,如果输入保证唯一且盐是常数,那么散列算法创建的输出值是否可以保证唯一?

5 个答案:

答案 0 :(得分:4)

答案是肯定的。具有相同salt的相同id输入将始终产生相同的输出。

但是,如果您的问题是关于保证输出始终是唯一的,那么答案是否定的。即使输入不同且盐常数,散列也会产生两次相同的输出,这是一个非常小的统计概率。

答案 1 :(得分:3)

原则上,如果输入大小大于输出大小,没有没有冲突的散列算法。 (在您的情况下,相关的输入大小将是此部分的大小,它从一个输入变为下一个输入。)

对于较短的输入是否存在冲突是散列算法的一个属性,但是这个想法是这些的概率应该非常小(每对输入大约1 /(2 ^输出大小),对于a好的算法)。

答案 2 :(得分:3)

你的问题可以将两个不同的值散列到相同的东西,还是哈希确定性?

如果是前者那么是,你可以有哈希冲突。设计良好的加密强哈希应该很难找到两个散列到相同值的值,或者找到匹配给定散列的输入,但它们不能保证唯一性。

由鸽子洞负责人: 如果您的散列是一个常量,比如说64位(不失一般性),那么您将拥有最多2 ^ 64个唯一输出散列值。由于如果您使用的是字符串,则有超过2 ^ 64个潜在输入,因此在您的哈希值最多为2 ^ 64 + 1项之后会保证发生冲突。

答案 3 :(得分:1)

是的,当输入和salt相同时,将产生相同的散列。请注意,不同的输入可能会产生相同的哈希值。

答案 4 :(得分:0)

总之没有。答案越长,perfect oracle就可以解决您提出的问题。由于没有人证明存在完美的神谕,因此目前认为这是不可能的。另一方面并不仅仅是因为我们作为一个集体不够聪明才能弄明白这一点。类似于P!= NP