了解BCrypt

时间:2014-01-04 17:45:20

标签: php hash passwords salt bcrypt

我理解如何编写PHP代码以成功利用BCrypt。所以,我不需要帮助它开始工作

相反,我需要帮助理解BCrypt如何神奇地工作!

this code,在第15行,为了验证登录密码是否= =原始(现在是哈希/盐渍)密码,它看起来就像你只是(a)创建一个新的哈希/ salted值使用登录密码和原始(现在哈希/盐渍)密码,然后(b)将(a)中创建的值与原始(现在的哈希/盐渍)密码进行比较。 我不明白这些是如何平等的,但它们是!

例如,假设用户使用测试密码注册,可以说(为简单起见)将哈希/盐渍加到 1234

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

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

如何使用新的SALT值(在这种情况下 1234 )散列/腌制测试会导致匹配?

此时,这个问题大多只是我的脑筋急转弯。 ;)

1 个答案:

答案 0 :(得分:5)

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

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

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

crypt的结果是$2y$number$salt-hashedpassword,因此如果您使用哈希密码的开头,您将获得原始盐。

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