正确使用password_hash

时间:2014-07-21 22:35:59

标签: php php-5.5

我想弄清楚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

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

1 个答案:

答案 0 :(得分:3)

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

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

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