password_hash() 自动生成含算法、盐和参数的哈希,password_verify() 自动解析并安全比对,password_needs_rehash() 支持平滑升级;须原样存储哈希字符串,数据库字段建议varchar(255)。

PHP 的 password_hash() 生成的哈希值自带算法、盐和成本参数,验证时直接用 password_verify() 即可,无需手动管理盐或配置参数。
密码加密:用 password_hash() 生成安全哈希
推荐使用默认的 PASSWORD_ARGON2ID(PHP 7.3+)或 PASSWORD_DEFAULT(当前 PHP 版本推荐算法):
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
-
PASSWORD_DEFAULT会随 PHP 升级自动适配更安全的算法,生成的哈希字符串包含完整元信息 - 不要硬编码算法或自己生成盐——
password_hash()已内置强随机盐 - 示例:
php
$hash = password_hash("my_password123", PASSWORD_DEFAULT);
// 输出类似:$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi
?>
密码验证:用 password_verify() 安全比对
该函数自动解析哈希中的算法、盐和参数,与明文密码重新计算并比对:
- 只传入原始密码和数据库中存储的完整哈希字符串即可
- 返回布尔值:
true表示匹配,false表示不匹配或哈希格式异常 - 示例:
$hash = '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi';
if (password_verify("my_password123", $hash)) {
echo "登录成功";
} else {
echo "密码错误";
}
?>
升级旧哈希:用 password_needs_rehash() 平滑迁移
当 PHP 升级导致 PASSWORD_DEFAULT 指向新算法,或你调整了成本参数,已存的旧哈希可能需更新:
- 登录成功后,检查是否需要重哈希:
password_needs_rehash($hash, PASSWORD_DEFAULT) - 若返回
true,用新password_hash()重新加密并更新数据库中的哈希值 - 这样既兼容老数据,又逐步提升安全性
注意事项
- 哈希字符串必须原样存储(含前缀如
$2y$或$argon2id$),不能截断或 base64 编码 - 数据库字段建议用
VARCHAR(255),足够容纳所有当前及未来算法输出 - 不要用
==或strcmp()手动比对哈希——易受时序攻击,password_verify()已做恒定时间处理
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










