【问题标题】:what's the 2 best algorithms when hashing passwords? [duplicate]散列密码时最好的两种算法是什么? [复制]
【发布时间】:2011-06-22 18:41:27
【问题描述】:

我想使用 2 个不同的哈希值存储我的密码(为相同的密码保存 2 个哈希值,以(稍微)通过(几乎)消除冲突来提高安全性。 第一个问题:首先,由于碰撞可以忽略不计,因此是否有足够的好处? 第二个问题:最好的哈希是什么? sha-1 和 sha-256 是否比 sha-256 和一些不相关的算法(如河豚)有更多的碰撞?

【问题讨论】:

  • 您需要散列还是可以使用加密?例如。 php.net/manual/en/intro.mcrypt.php
  • 为此使用 bcrypt。永远不要发明自己的密码学!
  • 您应该计算 sha256 的碰撞概率。整个宇宙中大约有 10^80 个原子。在整个 Univese 中找到特定原子的机会比让两个不同的字符串生成相同的散列的机会更小。此外,您应该阅读“计算机编程艺术”的介绍。关于安全性和随机性有一个启发性的部分。
  • 我想使用无法解密的东西,如果 mcrypt 或 bcrypt 允许我这样做,我想没问题。

标签: php hash passwords


【解决方案1】:

如果我理解你是正确的,你想在你的数据库中使用两种不同的散列算法存储两次散列密码,是吗?只需使用两个产生不同长度的哈希算法,两个不同的哈希之间根本不会发生冲突。

例如 sha1 和 md5 提供不同长度的输出。

【讨论】:

  • 我真的不喜欢 md5,因为计算冲突是多么容易,这会使整个想法变得不那么安全,而不是更安全,因为您可以尝试使用与 md5 哈希冲突的密码找出真正的密码(假设你有它,但我不想依赖我的代码/数据库永远不会出来)。
  • 这是一个示例,只需使用另一种哈希算法产生不同的输出长度。但总的来说,我同意 Jesse 的观点,绝对不是真的,您会在数据库中发现冲突是容易的,甚至是意料之中的。
【解决方案2】:

我建议使用 sha1 而不必担心冲突。 sha1 冲突的可能性为 10^-45(如此处 Probability of SHA1 collisions 所述),因此除非您拥有数十亿用户,否则它永远不会成为问题。

【讨论】:

  • -1 SHA-x 不应用于密码。
  • 嘿,@pst 感谢您的输入 - 然而,一年前 SHA1 密码仍然很常见。我意识到刚刚发表了一堆关于破解它们的文章,但是与其查找和否决过时的答案,不如在更安全的替代方案上发布一个有用的答案怎么样?如果不提供更明智的选择,您就无法帮助 OP(或其他任何人)。
  • 一年前还是个糟糕的信息。添加更正(或适当的警告)后,可以更改反对票。找到更好的技术并不是一项艰巨的任务,我给出了一个免费的隐含问题:"Why is SHA-1 not suitable for passwords?"(这个问题是谷歌对上一个问题的第一个命中)。此外,请参阅 first linked 示例。认为解释问题是我的工作是错误的说法。
猜你喜欢
  • 2014-01-15
  • 2013-01-06
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2021-08-25
  • 2021-06-27
  • 2015-06-29
  • 1970-01-01
相关资源
最近更新 更多