2

我希望将 BCrypt 实现到 Web 应用程序中,但是我迷失了如何合并/更改工作/迭代/轮次的级别:

php.net crypt 函数状态

自 PHP 5.3.0 起,PHP 包含自己的实现。

我知道 using$pw = crypt($password);会自动为我创建一个随机盐,我可以将其存储$pw在数据库中。

我了解我可以使用以下方式检查密码有效性

if ( crypt($user_input, $pw) == $pw) ) {
    // password is valid
} else {
    // password is not valid
}

我知道 Bcrypt 之所以如此出色,是因为 bcrypt 是基于 Blowfish crypt 的自适应函数。随着时间的推移,可以增加轮数以使其变慢,因此尽管计算技术更快,但它仍然可以抵抗蛮力攻击。

所以我的问题是,如何减慢或加快密码有效性的检查?或者以另一种方式,如何设置创建哈希密码所需的默认迭代次数?

4

2 回答 2

2

这是一个解决方案:

https://github.com/ircmaxell/password_compat

用法:

$options = array('cost' => 8); // 2^cost is the number of iterations 
$hash = password_hash("adsfasdf", PASSWORD_BCRYPT, $options);

请参阅此处以获取更多答案:

于 2013-07-01T14:21:59.263 回答
1

这一切都在文档中。这种情况下的盐值必须是

“$2y$”,一个两位数的成本参数,“$”,以及来自字母表“./0-9A-Za-z”的 22 个字符。在 salt 中使用超出此范围的字符将导致 crypt() 返回零长度字符串。两位数的成本参数是底层基于 Blowfish 的散列算法的迭代计数的以 2 为底的对数,并且必须在 04-31 范围内,超出此范围的值将导致 crypt() 失败。

所以对于 1024 (2^10) 轮,调用应该是

crypt($user_input, "$2y$10$......................");

其中每个.代表合法字母表中的一个盐字符。将参数增加/减少10一倍/减半轮数。

于 2013-07-01T14:59:46.633 回答