推荐答案
// www.javascriptcn.com code example
// 使用 password_hash 创建密码的哈希值
$password = "user_password";
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// 使用 password_verify 验证密码
$userInput = "user_input_password";
if (password_verify($userInput, $hashedPassword)) {
echo "密码正确!";
} else {
echo "密码错误!";
}本题详细解读
password_hash 函数
password_hash 是 PHP 5.5 引入的一个函数,用于生成密码的哈希值。它使用了一种安全的哈希算法(如 bcrypt),并且会自动生成一个随机的盐值(salt),确保每次生成的哈希值都不同。
语法
password_hash(string $password, int|string $algo, array $options = []): string|false
$password: 需要哈希的密码字符串。$algo: 使用的哈希算法。推荐使用PASSWORD_DEFAULT,它会自动选择当前 PHP 版本中最安全的算法。$options: 可选参数,用于指定算法的选项,如cost(计算成本)等。
返回值
- 返回一个包含哈希值的字符串,或者在失败时返回
false。
password_verify 函数
password_verify 用于验证用户输入的密码是否与存储的哈希值匹配。它会自动处理哈希值中的盐值,因此你不需要手动提取或管理盐值。
语法
password_verify(string $password, string $hash): bool
$password: 用户输入的密码。$hash: 之前通过password_hash生成的哈希值。
返回值
- 如果密码与哈希值匹配,返回
true,否则返回false。
使用场景
- 用户注册:在用户注册时,使用
password_hash对用户密码进行哈希处理,并将哈希值存储到数据库中。 - 用户登录:在用户登录时,使用
password_verify验证用户输入的密码是否与数据库中存储的哈希值匹配。
注意事项
- 不要手动生成盐值:
password_hash会自动生成盐值,手动生成可能会导致安全问题。 - 使用
PASSWORD_DEFAULT:这个常量会自动选择当前 PHP 版本中最安全的算法,确保你的应用在未来也能保持安全性。 - 定期更新哈希算法:随着 PHP 版本的更新,
PASSWORD_DEFAULT可能会指向不同的算法,因此建议定期更新密码哈希值。