我理解如何编写PHP代码以成功利用BCrypt。所以,我不需要帮助它开始工作。
相反,我需要帮助理解BCrypt如何神奇地工作!
在this code,在第15行,为了验证登录密码是否= =原始(现在是哈希/盐渍)密码,它看起来就像你只是(a)创建一个新的哈希/ salted值使用登录密码和原始(现在哈希/盐渍)密码,然后(b)将(a)中创建的值与原始(现在的哈希/盐渍)密码进行比较。 我不明白这些是如何平等的,但它们是!
例如,假设用户使用测试密码注册,可以说(为简单起见)将哈希/盐渍加到 1234 。
一天后,用户尝试登录(使用 1234 ),我们需要对其进行身份验证。为此,我们执行第15行的代码。这意味着我们执行以下操作:
crypt("test", "1234") == "1234"
如何使用新的SALT值(在这种情况下 1234 )散列/腌制测试会导致匹配?
此时,这个问题大多只是我的脑筋急转弯。 ;)
答案 0 :(得分:5)
Bcrypt哈希取决于密码和盐,并且(与任何哈希算法一样)它是完全确定的。
如果密码和salt相同,结果将是相同的。 如果密码或盐更改,结果将会更改。
当您使用crypt($password, $hashedPassword)
时,bcrypt未使用哈希密码作为salt。它从散列密码中提取盐,然后使用它。
crypt
的结果是$2y$number$salt-hashedpassword
,因此如果您使用哈希密码的开头,您将获得原始盐。
请注意crypt($password, $salt)
的结果如何以$salt
的值开头。