推荐直接使用 password_hash() 函数生成随机密码哈希,它自动选用 bcrypt 等安全算法、生成强随机盐并封装完整哈希字符串;验证时用 password_verify() 自动处理比对,无需手动管理盐或算法细节。

PHP 7 中生成随机密码哈希,**推荐直接使用 password_hash() 函数**,它会自动选用安全的算法(如 bcrypt)、生成强随机盐(salt),并把盐和哈希一并编码进结果字符串中,无需手动管理盐值。
用 password_hash() 生成哈希
这是最简单也最安全的方式:
- 传入明文密码和可选的算法(默认就是
PASSWORD_DEFAULT,目前为 bcrypt) - 函数返回一个包含算法、成本因子和盐的完整哈希字符串(例如:
$2y$10$...) - 无需额外生成盐或拼接——全部由 PHP 自动完成
$hash = password_hash($password, PASSWORD_DEFAULT);
// 输出类似:$2y$10$9BZaXvQfT6rLmNpOqR.sUeVwYxZcDgHiJkLmNoPqRsTuVwXyZaBcD
echo $hash;
控制哈希强度(可选)
如果需要调整 bcrypt 的计算成本(影响安全性与性能平衡),可传入选项数组:
-
cost值建议在 10–12 之间(默认是 10) - 值越高越慢但抗暴力破解能力越强;过高会影响登录响应速度
- 不建议低于 10,也不建议硬编码高于 14(可能在低配服务器上超时)
验证密码用 password_verify()
后续校验用户输入时,不要自己解码或比对哈希,而是用配套函数:
- 它能自动从哈希字符串中提取盐和参数,重算并比对
- 即使未来
PASSWORD_DEFAULT升级为新算法(如 Argon2),该函数仍兼容旧哈希
echo '密码正确';
} else {
echo '密码错误';
}
不推荐的手动方式(仅作对比)
避免以下做法:
- 用
md5()、sha1()等过时算法(无盐、易碰撞、可被彩虹表破解) - 手动拼接盐(如
md5($salt . $password))——盐若不够随机或复用,安全性大打折扣 - 用
crypt()且未正确配置算法和盐——易出错,不直观
这些方式缺乏现代哈希的标准防护机制,PHP 官方已明确不鼓励。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











