我想弄清楚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
它应该像这样工作吗?这是在数据库中存储密码的正确方法吗?
答案 0 :(得分:3)
$2y$10$.YHHLeFYcQoE6c//vl587uIFTOljmpmuDnSA0w0dxo1Rrpvi5zM9m
| | | | |
| | | | |
| | | |---------------------------------Hashed Password
| | |----------------------Salt
| |----Cost
----Algorithm
哈希包含查看密码是否与给定字符串的哈希匹配所需的所有信息。你知道它所用的算法,盐,以及它所散设的内容。所以你所要做的就是提供一个字符串,通过相同的算法传递相同的盐和成本,它将等于哈希值。
所以回答你的问题,是的,它应该像那样工作。 salt每次都会更改,这意味着每次都会更改散列密码,但您始终可以检查密码是否哈希到相同的哈希密码,因为哈希包含salt。