PHP中安全的密码哈希与加盐
大家好!我是一名初学PHP开发者,正在尝试理解如何安全存储用户密码。目前我使用MD5加盐,但有人告诉我这不安全。我当前的代码如下:
```php
function createPassword($password) {
$salt = 'my_very_secret_salt_12345';
return md5($salt . $password);
}
function checkPassword($password, $hash) {
$salt = 'my_very_secret_salt_12345';
return md5($salt . $password) === $hash;
}
```
我知道MD5已经过时,但不知道用什么替代。听说过bcrypt、password_hash和password_verify,但不明白如何正确使用。
主要问题:
1. 如何为每个密码正确生成盐?
2. 是否需要单独存储盐,以及在验证时如何传递?
3. 目前PHP中哪些算法被认为是安全的?
4. 如何防御暴力破解(brute force)和彩虹表攻击?
希望能得到详细的代码示例和解释。我想理解的不仅仅是“如何”,而是背后的原理。