我刚刚阅读了PHP 5.5中的新功能,它包括新的密码散列功能(http://www.php.net/manual/en/function.password-hash.php)。现在,如果你看一下描述,它的默认操作是随机生成一个密码盐,如果你没有指定。
但我不知道这有多大用处。因为如果您正在哈希密码以便安全存储,并且盐是随机的。然后,当您运行用户输入密码的字符串时,如果每次盐不同,则每次生成的散列都会不同。因此,您无法成功比较输入的有效密码与密码哈希的存储副本。
那么这怎么可能有用呢?
答案 0 :(得分:8)
salt包含在哈希值中。
<?php
$hash = password_hash("password", PASSWORD_DEFAULT, ['salt' => 'saltsaltsaltsaltsaltsa']);
print_r(password_get_info($hash));
echo $hash;
输出:
Array
(
[algo] => 1
[algoName] => bcrypt
[options] => Array
(
[cost] => 10
)
)
$2y$10$saltsaltsaltsaltsaltsOPRDjePxJkNp7mjBEve63IqKPFT7ehNG
如您所见,散列函数在散列本身中存储有关散列过程的信息。 password_verify()
函数然后解析hash
并根据此信息验证密码。