1

我试图弄清楚 password_hash 的正确使用我有下面的脚本

<?php
  $password = "test3";
  $hashAndSalt = password_hash($password, PASSWORD_BCRYPT);

  echo $hashAndSalt;
?>

据我所知,这也应该产生盐?

当我运行脚本时,哈希的开头以“$ 2y $ 10 $”开头,其余部分总是在每次运行时发生变化。

$2y$10$.YHHLeFYcQoE6c//vl587uIFTOljmpmuDnSA0w0dxo1Rrpvi5zM9m   <- run one
$2y$10$b6n3chpTQk1X7c0OdPp0ceZmw3GvZFsLx9FHq9RnYaJgbld915oYG   <- run two
$2y$10$AGffB7R1rTko8UmS1m6wT.ybG78.CkwrxqoRteNMeRPXexpSJW5iO   <- run three

它应该像这样工作吗?这是在数据库中存储密码的正确方法吗?

4

1 回答 1

3
$2y$10$.YHHLeFYcQoE6c//vl587uIFTOljmpmuDnSA0w0dxo1Rrpvi5zM9m
|  |  |                    |                               |
|  |  |                    |                               |
|  |  |                    |---------------------------------Hashed Password
|  |  |----------------------Salt
|  |----Cost
----Algorithm

哈希包含查看密码是否与给定字符串的哈希匹配所需的所有信息。你知道它被散列的算法,盐,以及它散列到什么。所以你所要做的就是提供一个字符串,用相同的盐和成本通过相同的算法,它要么等于散列,要么不等于散列。

因此,要回答您的问题,是的,它应该像那样工作。salt 每次都会更改,这意味着哈希密码每次都会更改,但是您始终可以检查密码是否哈希为相同的哈希密码,因为哈希包含 salt。

于 2014-07-21T22:48:34.327 回答