1

我正在使用 bcrypt 对我的密码进行哈希处理,似乎 symfony2 身份验证系统不会产生与 php 的本机 crypt 函数相同的哈希值。波纹管是我为我的用户密码生成的盐:

 $salt = '$2y$13$' . substr(md5(uniqid(rand(), true)),0,21) . '$';
 $this->setPassword('test',$salt);

在我的 security.yml 文件中,我只是在做:

encoders:
    Blogger\BlogBundle\Entity\User:
        algorithm:  bcrypt
        iterations: 13

这两种编码方法会产生不同的哈希值有什么原因吗?我使用的库是 ircmaxell/password-compat。

4

2 回答 2

3

在 Symfony2 中使用它的最佳方法是使用获取编码器。

use \Blogger\BlogBundle\Entity\User;

$user = new User();

$encoderFactory = $this->get('security.encoder_factory');
$encoder = $encoderFactory->getEncoder($user);

$salt = 'salt'; // this should be different for every user
$password = $encoder->encodePassword('password', $salt);

$user->setSalt($salt);
$user->setPassword($password);

如果你使用 FOSUserBundle,你应该使用:

use \Blogger\BlogBundle\Entity\User;

$userManager = $this->get('fos_user_manager');

$password = 'password';
$user = new User();
$user->setPlainPassword($password);

$userManager->updateUser($user, true); // second argument tells user manager to flush
于 2014-10-08T11:04:09.830 回答
1

在查看了 bcrypt 的 Symfony2.3 实现的源代码后,他们使用了一个名为 hash_algorithm() 的函数,它似乎产生了与 crypt() 不同的结果。两者都使用 $2y$ 版本的 bcrypt 并且我将两种算法的成本都设置为 13 ......但是执行以下设置密码更一致:

$user->setPassword(password_hash($user->getPassword(), PASSWORD_BCRYPT, array('cost' => 13)));

那行代码似乎解决了我的问题。最好的部分是我什至不必再产生盐了。

于 2013-06-24T00:47:20.937 回答