3

我刚刚阅读了 PHP 5.5 中的新功能,它包括新的密码哈希功能(http://www.php.net/manual/en/function.password-hash.php)。现在如果你看描述,它的默认操作是随机生成一个密码盐,如果你不指定一个。

但我不明白这有什么用。因为如果您要对密码进行哈希处理以安全存储并且盐是随机的。然后,当您运行用户输入的密码字符串时,如果盐每次都不同,则生成的哈希每次都会不同。因此,您将无法成功地将输入的有效密码与密码哈希的存储副本进行比较。

那么这怎么可能有用呢?

4

1 回答 1

8

盐包含在哈希值中。

<?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

于 2013-10-10T14:51:20.713 回答