本文目录导读:

在 PHP 中,密码哈希推荐使用 password_hash() 函数,配合 password_verify() 进行验证。
核心函数(推荐)
// 1. 创建哈希(加密)
$hash = password_hash($password, PASSWORD_DEFAULT);
// 2. 验证密码
if (password_verify($password, $hash)) {
// 密码正确
} else {
// 密码错误
}
完整示例
// 用户注册时
function registerUser($username, $password) {
// 创建哈希(自动包含盐值)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// 将 $hashedPassword 存入数据库
// INSERT INTO users (username, password) VALUES (?, ?)
}
// 用户登录时
function loginUser($username, $password) {
// 从数据库取出 $hashedPassword
$hashedPassword = getUserPassword($username);
if (password_verify($password, $hashedPassword)) {
return true; // 登录成功
} else {
return false; // 登录失败
}
}
常量选项说明
| 常量 | 算法 | 是否推荐 |
|---|---|---|
PASSWORD_DEFAULT |
目前是 bcrypt(PHP 7.4+)或 Argon2id(PHP 8.0+) | ✅ 最推荐(自动适应未来算法) |
PASSWORD_BCRYPT |
bcrypt | ✅ 安全,兼容性好 |
PASSWORD_ARGON2I |
Argon2i | ✅ 更安全,但需 PHP 7.2+ |
PASSWORD_ARGON2ID |
Argon2id | ✅ 最安全,PHP 7.3+ |
注意:
PASSWORD_DEFAULT会随 PHP 升级而自动更新算法,所以推荐始终使用它。
为什么不用 md5 或 sha1?
// ❌ 不安全,已过时 $hash = md5($password); $hash = sha1($password); // ✅ 正确做法 $hash = password_hash($password, PASSWORD_DEFAULT);
原因:
- MD5/SHA1 速度太快,容易被暴力破解
- 没有内置盐值,相同密码产生相同哈希
- 已被广泛破解
高级技巧:自定义成本(cost)
// 自定义 bcrypt 成本(默认 10,范围 4-31)
$options = [
'cost' => 12, // 增加成本会降低速度,但更安全
];
$hash = password_hash($password, PASSWORD_BCRYPT, $options);
密码是否需要重新哈希?
// 检查哈希是否需要升级
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$newHash = password_hash($password, PASSWORD_DEFAULT);
// 更新数据库中的哈希
}
始终使用:
- 哈希:
password_hash() - 验证:
password_verify() - 算法:
PASSWORD_DEFAULT
绝对禁止:
md5(),sha1(),crypt()(旧式)用于密码存储- 自定义加密算法
- 明文存储密码
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播