加密哈希值是否提供了真正独特的结果?

时间:2010-06-17 09:07:44

标签: algorithm hash

我想知道md5,sha1和anothers是否会返回唯一值。

例如,sha1()的{​​{1}}会返回test,长度为40个字符。因此,对于大于40个字符的字符串,sha1必须相同(当然它是乱码的,因为给定的输入可能包含空格和特殊字符等。)

由于这个原因,当我们存储用户的密码时,他们可以输入他们的原始密码或一些超级密码,没人知道。

这是正确的,还是这些哈希算法提供了非常独特的结果 - 我很确定这几乎不可能。

5 个答案:

答案 0 :(得分:13)

(注意:您询问的是hashing个功能,而不是encryption。)

根据定义,它们不可能是独一无二的。他们需要大量投入并减小其规模。因此,很明显,它们无法代表他们压缩的所有信息。所以不,他们不提供“真正独特”的结果。

然而,

他们提供的是“抗冲突”结果。即他们试图表明两个略有不同的数据会产生明显不同的哈希值。

答案 1 :(得分:10)

Hashing algorithms(这是您所指的)不提供独特的结果。你所指的是Pigeonhole Principle。输入数量超过输出数量,因此必须将多个输入映射到同一输出。这就是为什么输出散列越长越好,因为映射到输出的输入数量较少。

Encrypting必须提供独特的结果,因为您可以对邮件进行加密并对其进行解密并获取相同的邮件。

答案 2 :(得分:4)

SHA1不是加密算法,而是cryptographic hash function

你是对的 - 因为它将任意长输入映射到固定大小的散列,可能会发生冲突。但是加密哈希函数的想法是不可能“按需”创建这样的冲突。这就是我们称之为单向散列函数的原因。

引用(source)

  

理想的加密散列函数有四个主要或重要的属性:
   *很容易计算任何给定消息的哈希值,
   *找到具有给定哈希值的消息是不可行的    *修改消息而不改变其散列是不可行的    *找到具有相同散列的两个不同消息是不可行的。

答案 3 :(得分:1)

哈希算法永远不会保证不同输入的结果不同。这就是为什么散列总是被用作单向“加密”的原因。

但是你必须要现实,160位哈希算法可以有2 ^ 160种可能的组合,这是......很多! (1有48个零)

答案 4 :(得分:1)

这些不是加密函数,而是哈希函数。

根据定义,哈希可能会有两个不同的字符串冲突(映射到相同的值),原因就在于您提到的原因。但这通常不相关,因为:

  1. 加密哈希(例如SHA1)尽量使相似字符串(非常非常)低的碰撞概率
  2. 您无法从哈希中推断出原始字符串。
  3. 这两个意味着您无法获取哈希并轻松生成映射到其中的一个字符串。