【发布时间】: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 到底是如何产生匹配的?
在这一点上,这个问题对我来说基本上只是一个脑筋急转弯。 ;)
【问题讨论】:
-
那盐生成是完全废话。
-
不是答案,但真的不要再使用那些蹩脚的第 3 方代码了。并在 PHP 中使用原生的password hashing API。
-
看看这个答案,我想它会让你更好地理解 bcrypt 哈希是如何组成的:stackoverflow.com/a/10933491/165055
-
不要一起破解代码,而是使用 PHP 5.5 引入的password functions(compat code 适用于 PHP >= 5.3.7)
标签: php hash passwords salt bcrypt