Avatar ·

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)和彩虹表攻击? 希望能得到详细的代码示例和解释。我想理解的不仅仅是“如何”,而是背后的原理。