我正在升级我网站的安全级别。
在研究存储密码的最佳方法时,我在PHP 5.3中找到了BCRYPT选项。我已经实现了这个函数来使用静态SALT,但我读到每个密码应该有不同的SALT或者无法实现目的。
我应该使用纯文本的用户记录将SALT存储在数据库中吗?这也失败了吗?或者我应该使用md5散列盐并将其存储在数据库中?
实现此项并存储SALT时,最佳方法是什么?
答案 0 :(得分:3)
modular crypt format for bcrypt does already contain a 128 bit salt。因此,除非您使用与此不同的实现,否则您不需要另外的盐。
请注意,salt的主要目的是使每个输入都是唯一的,以便查找表辅助对存储值的字典攻击是不切实际的。
Jacco提醒我,crypt
中PHP的本机bcrypt实现不会自动生成salt。所以你必须自己做,例如:
$salt = substr(str_replace('+', '.', base64_encode(call_user_func_array('pack', array_merge(array('H14N'), explode('.', uniqid('', true)))).pack('N2', mt_rand(), mt_rand()))), 0, 22);
$hash = crypt($password, '$2a$10$'.$salt.'$');
答案 1 :(得分:2)
您应该为每个用户创建一个新的随机盐,并将其与哈希值一起存储在数据库中。大多数bcrypt实现已经这样做了。如果你查看输出,你会发现它是一个包含盐的$
分隔值。