如何使用CakePHP的新Blowfish / Bcrypt密码

时间:2012-12-12 18:03:00

标签: php cakephp bcrypt

让我们假设我是CakePHP的新手。让我们进一步假设我已经完全按照this tutorial中所写的那样编写了我的用户身份验证(除了它中的错误使我浪费了一个多小时试图弄清楚)。

Migration Guide for 2.3表示bcrypt已添加到核心哈希算法中。关于如何实现这一目标的唯一提示是:

  

您现在可以在$ authenticate数组中使用Blowfish来允许使用bcrypt密码。

我完全不知道这意味着什么以及我现在如何在这里使用bcrypt。谷歌搜索它只导致指南,这不指导我。我很想知道我是如何激活它的 - 在哪里放置选项以及写什么以便它可以工作,假设我的设置就像上面提到的教程一样。

此外,这是否需要特殊版本的PHP,还是可以在CakePHP支持的任何版本上运行?

谢谢。

2 个答案:

答案 0 :(得分:4)

如果你打算使用尚未稳定的代码(2.3是RC),那么docs将是一种恐慌,你需要在没有文档的情况下解决一些问题。即使没有文档,代码也是免费提供的has comments

Blowfish有你自己需要使用的Auth adaptor

如果文档没有帮助,你也可以查看tests,因为测试提供的100个例子远比任何文档好。

答案 1 :(得分:3)

如果您已经成功使用表单身份验证,则将'Form'替换为'Blowfish'作为身份验证适配器,即

class AppController extends Controller {
    public $helpers = array("Html","Form", "Js", "Csv");
    public $components = array(
           'Auth' => array(
                'authenticate' => array(
                    'Blowfish' => array(/* your settings */) 
                )
            )
        );
        /* ... */
    }

然后,您需要将来电更改为AuthComponent::password(如果您可能在用户模型的beforeSave中遵循教程)

AuthComponent:password($pwd)

Security::hash($pwd,'blowfish');

因为实现了AuthComponent的密码方法以使用您的Security.salt设置,该设置不适用于blowfish(它会生成一个新的盐并将其存储在密码哈希中)。

另请注意,CakePHP中的实现前缀为$ 2a $,它在PHP 5.3.7之前存在安全问题(参见this note)。