【问题标题】:What is password hashing? [closed]什么是密码哈希? [关闭]
【发布时间】:2010-12-08 20:02:45
【问题描述】:

散列密码是什么意思?

【问题讨论】:

  • 你不能谷歌一下吗?你能扩展你的问题吗?您是否在查看来源但不了解某些内容?
  • @Frank:我遇到过这样的问题。他们缺乏深度也让我很恼火,但忽略这一点,我们可以从 Google 为“密码哈希”编写一个很好的登录页面。
  • @Michael,同意了。此外,SO 在能够快速准确地回答您的编程问题方面建立了声誉。在这种情况下,这使这种声誉得以延续。
  • @Frank 如果您搜索密码散列,您更可能找到 Wikipedia,而不是 Stack Overflow。这个太简单了。
  • 截至 2009 年 10 月 21 日,stackoverflow 主题位于密码哈希命中的第二页:stackoverflow.com/questions/326699/…

标签: algorithm hash passwords


【解决方案1】:

定义:
Hashing 是将函数 f() 应用于可变大小的输入以产生恒定大小的输出。

A => f() => X
B => f() => Y
C => f() => Z

散列也是一种单向函数,这意味着没有函数可以反转或撤消散列。同样,重新应用哈希 f(f(x)) 也不会再次生成 x

详情:

哈希函数可以像“将 13 加到输入”一样简单,也可以像 Cryptographic Hash 这样复杂,例如 MD5SHA1。有很多东西可以构成一个好的散列函数,比如:

  • Low Cost: 易于计算
  • Deterministic:如果我多次对输入 a 进行哈希处理,我每次都会得到相同的输出
  • Uniformity:输入将均匀分布在可能的输出中。这符合称为Pigeonhole Principle 的内容。由于输出数量有限,我们希望f() 将这些输出均匀放置,而不是放在同一个桶中。当两个输入计算到相同的输出时,这称为冲突。散列函数产生更少的冲突是一件好事。

哈希应用于密码:

密码的哈希处理与上面描述的过程相同,但是它带有一些特殊的注意事项。构成良好散列函数的许多属性在涉及密码时并无益处。

确定性 为例,因为当两个人使用相同的密码时,哈希值会产生确定性结果,因此哈希值在密码存储中看起来是一样的。这是一件坏事!然而,这种情况被称为 salt 的东西缓解了。

另一方面,

一致性 是有益的,因为希望算法限制冲突。

因为散列是单向的意味着无法从输出中确定输入,这就是为什么散列非常适合密码!

【讨论】:

    【解决方案2】:

    获取一个数据块并返回一个字符串,这样您就无法取回原始数据块。

    Wikipedia Article

    散列密码将采用明文字符串并对其执行算法(取决于散列类型)以获得完全不同的值。该值每次都相同,因此您可以将散列后的密码存储在数据库中,并根据散列值检查用户输入的密码。

    阻止您将明文密码存储在数据库中(坏主意)。

    这是list of hash functions

    【讨论】:

    • 我建议这个链接 en.wikipedia.org/wiki/… 对于密码散列应该只使用“加密散列函数”而不是例如 CRC
    【解决方案3】:

    散列只是一个单向函数,它将接受一个字符串或数据源并创建一个加密后的字符串。

    有多种散列算法,最流行的是 MD5,但还有很多其他算法。许多业内专家都在使用 SHA256 算法来提高安全性。

    单词的 MD5 哈希:

    密码是 22e5ab5743ea52caf34abcc02c0f161d

    密码是 319f4d26e3c536b5dd871bb2c52e3178

    无论您尝试散列多少个字符,结果的字符长度都是相同的。哈希通常用于存储密码以防止被查看。

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 1970-01-01
      • 2016-02-06
      • 2020-11-13
      • 2012-10-14
      • 2013-05-14
      • 1970-01-01
      • 2016-02-22
      • 2013-03-24
      相关资源
      最近更新 更多