Bcrypt with PHP 5.4.16 - 工作水平

时间:2013-07-01 14:13:49

标签: php cryptography bcrypt crypt

我希望将BCrypt实现到Web应用程序中,但是我在如何合并/更改工作/迭代/轮次方面感到迷茫:

php.net crypt function

  

从PHP 5.3.0开始,PHP包含自己的实现。

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

我了解我可以使用

检查密码有效性
if ( crypt($user_input, $pw) == $pw) ) {
    // password is valid
} else {
    // password is not valid
}

我知道Bcrypt如此优秀的原因是bcrypt是一个基于Blowfish地穴的自适应功能。随着时间的推移,可以增加轮数以使其更慢,因此尽管计算技术更快,它仍然可以抵抗暴力攻击。

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

2 个答案:

答案 0 :(得分:3)

这是一个解决方案:

https://github.com/ircmaxell/password_compat

用法:

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

有关更多答案,请参阅here

答案 1 :(得分:1)

全部都在documentation。在这种情况下,盐值必须

  

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

因此,对于1024(2 ^ 10)轮,调用应为

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

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