这是将密码存储在 PHP 中的不良做法吗?

Is this a bad practice for storing passwords in PHP?

我正在使用 PHP 中的 crypt 函数来散列密码,显然还有盐。但是我通过在日期函数上调用 md5 函数来生成盐。每次用户登录时,盐都会重新生成。

这有什么不好的吗?我对 PHP(和 webdev)还是比较陌生,我正试图在部署此代码之前确保安全。

$salt = md5(date('m/d/Y h:i:s a'));

许多人认为这是不好的做法。以下是(部分)原因:

  1. 您正在使用 md5,一种弱、旧、快的算法来计算哈希值。
  2. 盐以可预测的方式生成。每个用户的盐应该不同(即使在同一秒内注册)并且应该比日期更随机。
  3. 您正在重新发明轮子。您正在使用 crypt 函数来散列密码,因此没有理由不使用它来获取安全盐。 password_hash() 是 PHP 5.5 的内置函数,compatibility library 适用于稍旧的版本。

How to use password_hash()

TL;DR:使用 password_hash() 生成盐并对密码进行哈希处理,无需以不太安全的方式重新发明轮子。

感谢 Hobo Sapiens 首先提到 password_hash()