【问题标题】:Understanding BCrypt [closed]了解 BCrypt [关闭]
【发布时间】:2023-03-06 15:07:01
【问题描述】:

我了解如何编写 PHP 代码以成功利用 BCrypt。所以,我不需要帮助就可以让它工作

相反,我需要帮助了解 BCrypt 到底是如何神奇地工作的!

this code 的第 15 行,为了验证登录密码是否 == 原始(现在是散列/加盐)密码,在我看来您只是 (a) 创建一个新的散列/加盐使用登录密码和原始(现在是散列/加盐)密码的值,然后(b)将(a)中创建的值与原始(现在是散列/加盐)密码进行比较。 我不明白这些怎么可能是平等的,但它们是平等的!

例如,假设用户使用 test 密码进行注册,假设(为简单起见)被哈希/加盐为 1234

一天后,用户尝试登录(使用 1234),我们需要对他们进行身份验证。为此,我们执行第 15 行的代码。这意味着我们执行以下操作:

crypt("test", "1234") == "1234"

用新盐值(在本例中为 1234)散列/加盐 test 到底是如何产生匹配的?

在这一点上,这个问题对我来说基本上只是一个脑筋急转弯。 ;)

【问题讨论】:

标签: php hash passwords salt bcrypt


【解决方案1】:

Bcrypt 散列取决于密码和盐,并且(与任何散列算法一样)它是完全确定的。

如果密码和盐相同,结果将是相同的。 如果密码或盐改变,结果将改变。

当您使用crypt($password, $hashedPassword) 时,bcrypt 不会使用散列密码作为盐。它从散列密码中提取盐,然后使用它。

crypt 的结果是$2y$number$salt-hashedpassword,所以如果你取哈希密码的开头,你会得到原始的盐。

注意crypt($password, $salt) 的结果如何以$salt 的值开头。

【讨论】:

  • 很好的答案。我用了几次,但不明白它是如何工作的。
  • 这是一个很好的答案。它完美地打破了它。我的大脑不再痛了。谢谢!
猜你喜欢
  • 2014-12-06
  • 2012-07-08
  • 2010-12-06
  • 1970-01-01
  • 2020-05-13
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多