【问题标题】:Do cryptographic hashes provide really unique results?加密哈希是否提供了真正独特的结果?
【发布时间】:2011-03-04 20:48:49
【问题描述】:

我想知道 md5、sha1 和其他是否返回唯一值。

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

因此,当我们存储用户的密码时,他们可以输入他们的原始密码或一些无人知道的超长密码。

这是对的吗,或者这些哈希算法是否提供了真正独特的结果 - 我很确定这几乎不可能。

【问题讨论】:

  • 它不是独一无二的,它只是“足够独特”
  • @Rex M:请记住,它不想要是唯一的,因为如果它是唯一的,则意味着直接映射,这意味着它可以反转.
  • 这里没有人真正提到,但是 sha1 是用于密码散列的错误算法,bcrypt 更安全。请务必阅读stackoverflow.com/questions/800685/…
  • Sam 是的,你是对的(SHA1 已死),但您在该链接中的 cmets 格式非常糟糕,恕我直言:我建议人们审查:valerieaurora.org/hash.html 并使用 NIST 批准的算法(即 SHA2 系列)用于加密目的。
  • @silky,如果您正在对重复文件进行第一次搜索,MD5 非常好,如果您正在对密码进行哈希处理,则 SHA2 系列不好,因为它很快。 bcrypt 很慢,这使得它不太容易受到暴力攻击。

标签: algorithm hash


【解决方案1】:

(注意:您问的是hashing 函数,而不是encryption)。

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

然而,他们提供的是“防碰撞”结果。 IE。他们试图证明两个略有不同的数据会产生显着不同的哈希值。

【讨论】:

    【解决方案2】:

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

    Encrypting 某些东西必须提供唯一的结果,因为您可以对消息进行加密和解密并获得相同的消息。

    【讨论】:

      【解决方案3】:

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

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

      引用(source)

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          1. 加密哈希(例如 SHA1)尽量降低相似字符串(非常、非常)的冲突概率
          2. 您无法从哈希中推断出原始字符串。

          这两个意味着您无法获取哈希并轻松生成映射到它的字符串之一。

          【讨论】:

            猜你喜欢
            • 2017-08-16
            • 1970-01-01
            • 1970-01-01
            • 2011-01-18
            • 1970-01-01
            • 1970-01-01
            • 2018-11-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多