使用password_hash()和password_verify()可安全加密验证密码,避免明文存储风险。该方法采用bcrypt算法自动加盐,防止彩虹表攻击,支持成本调整以平衡安全与性能,并能检查是否需重新哈希,确保长期安全性。

在PHP开发中,安全地存储用户密码是至关重要的。直接以明文保存密码会带来严重的安全隐患。正确的做法是使用哈希算法对密码进行加密处理。PHP提供了 password_hash() 和 password_verify() 函数,专门用于安全地加密和验证密码。
传统的加密方式如 md5 或 sha1 已不再安全,它们速度快且不加盐(salt),容易受到彩虹表攻击。而 password_hash() 默认使用 bcrypt 算法,自动添加随机盐值,极大提升了安全性。
使用该函数非常简单,传入明文密码即可生成哈希字符串:
$plaintextPassword = "user_password_123"; $hashedPassword = password_hash($plaintextPassword, PASSWORD_DEFAULT); echo $hashedPassword; // 输出类似:$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi
PASSWORD_DEFAULT 是当前默认的哈希算法(目前为 bcrypt),未来 PHP 升级可能会切换到更强的算法,但兼容性不受影响。
立即学习“PHP免费学习笔记(深入)”;
你可以通过选项调整哈希算法的复杂度,例如增加计算成本来提升安全性:
$hashedPassword = password_hash($plaintextPassword, PASSWORD_DEFAULT, [
'cost' => 12
]);
cost 值越高,加密越慢越安全。一般推荐 10-12,过高会影响服务器性能。
用户登录时,不能解密哈希密码,而是用 password_verify() 比较明文密码与数据库中存储的哈希值是否匹配:
if (password_verify($inputPassword, $storedHash)) {
echo "登录成功";
} else {
echo "密码错误";
}
即使哈希字符串每次生成都不同(因为盐值随机),password_verify 能正确识别是否为同一原始密码。
随着时间推移,系统可能升级哈希算法或提高 cost 值。可以使用 password_needs_rehash() 检查现有哈希是否符合新策略:
if (password_needs_rehash($storedHash, PASSWORD_DEFAULT, ['cost' => 12])) {
// 重新哈希并更新数据库
$newHash = password_hash($plaintextPassword, PASSWORD_DEFAULT, ['cost' => 12]);
// 更新数据库中的密码哈希
}
基本上就这些。只要坚持使用 password_hash() 和 password_verify(),就能有效保护用户密码安全,无需自己实现加盐或选择算法。不复杂但容易忽略。
以上就是PHP代码怎么加密用户密码_PHP密码加密与password_hash函数使用的详细内容,更多请关注php中文网其它相关文章!
全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号