我正在升级我网站的安全级别。
在研究存储密码的最佳方法时,我发现了 PHP 5.3 中的 BCRYPT 选项。我已实现此功能以使用静态 SALT,但我读到每个密码都应具有不同的 SALT 或达不到目的。
我应该将 SALT 与用户记录以纯文本形式存储在数据库中吗?这是否也违背了目的?或者我应该使用 md5 散列盐并将其存储在数据库中?
实现和存储 SALT 的最佳方法是什么?
最佳答案
modular crypt format for bcrypt does already contain a 128 bit salt .因此,除非您使用与此不同的实现,否则您不需要另一种盐。
请注意,salt 的主要目的是使每个输入都是唯一的,因此查找表辅助字典攻击存储值是不切实际的。
Jacco提醒我 PHP 在 crypt
中的原生 bcrypt 实现不会自动生成盐。所以你必须自己做,例如:
$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.'$');
关于php - BCRYPT 和 Random SALTS 在数据库中一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676542/