PHP中密码的安全哈希与加盐:如何正确实现?
大家好。我是一名初学PHP开发者,在存储用户密码时遇到了问题。目前我使用简单的md5(),但了解到这不安全。我尝试添加盐值,但不确定做法是否正确。
以下是我当前的注册代码:
```php
$password = $_POST['password'];
$salt = 'my_secret_salt';
$hashed_password = md5($salt . $password);
// 将 $hashed_password 存入数据库
```
登录验证时的代码:
```php
$password = $_POST['password'];
$salt = 'my_secret_salt';
$hashed_password = md5($salt . $password);
// 与数据库中的值进行比较
```
我发现的问题:
1. 盐值是静态的——一旦泄露,所有密码都会被破解。
2. md5() 速度太快,容易被暴力破解。
3. 没有针对时序攻击(timing attack)的防护。
请教如何正确实现PHP中的密码哈希?应该使用哪些函数?是否需要为每个用户生成唯一的盐值,以及如何存储它?非常感谢。