代码之家  ›  专栏  ›  技术社区  ›  Mikulas Dite

加密哈希提供真正唯一的结果吗?

  •  8
  • Mikulas Dite  · 技术社区  · 16 年前

    例如, sha1() test 退货 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 ,长度为40个字符。因此,大于40个字符的字符串的sha1必须是相同的(当然是加扰的,因为给定的输入可能包含空格和特殊字符等)。

    正因为如此,当我们存储用户的密码时,他们可以输入原始密码,也可以输入超长密码,谁也不知道。

    5 回复  |  直到 16 年前
        1
  •  13
  •   Noon Silk    16 年前

    (注:你问的是 hashing 功能,而不是 encryption ).

    他们干了什么 然而,提供的是“抗碰撞”的结果。也就是说,他们试图证明两个稍有不同的数据会产生明显不同的散列。

        2
  •  10
  •   kemiller2002    16 年前

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

    Encrypting

        3
  •  4
  •   Kzqai    15 年前

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

    散列函数是为了使它不可能“按需”创建这样的冲突。所以我们才叫他们 单向散列函数 ,也是。

    引用 (source) :


    *很容易计算任何给定消息的哈希值,

    *修改消息而不更改其哈希是不可行的,

        4
  •  1
  •   Philippe Leybaert    16 年前

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

    但你必须现实一点,一个160位的散列算法可以有2^160个可能的组合,这是。。。很多(1(带48个零)

        5
  •  1
  •   Vinko Vrsalovic    16 年前

    这些不是加密函数,而是散列函数。

    根据定义,散列可以使两个不同的字符串发生冲突(映射到相同的值),原因正是您提到的。但这通常并不相关,因为:

    1. 加密哈希(如SHA1)努力使相似字符串的冲突概率(非常非常)低
    2. 不能从散列中推断原始字符串。