php - BCRYPT 和 Random SALTS 在数据库中一起

标签 php mysql security encryption bcrypt

我正在升级我网站的安全级别。

在研究存储密码的最佳方法时,我发现了 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/

相关文章:

javascript - Symfony 4/javascript - 关系上的 UniqueEntity 约束

phpMyAdmin mbstring 错误

python - SQL查询已添加到数据库中,但认为这是错误的,导致Python程序崩溃

java.math.BigInteger,pow方法只接受int

security - 在Zend应用程序中处理无效输入的最安全方法是什么?

security - 控制对 future 内容的访问

php - 通过html形式在mysql中插入数据(以及更多..)

php - 通过php无表单提交数据到Mysql

mysql - 根据组从表中获取前 N 行

php - 在类中连接定义的变量和字符串时出现解析错误