FOSUserBundle BCryptPasswordEncoder salting

use*_*259 5 php bcrypt password-hash symfony fosuserbundle

升级到php7后,BCryptPasswordEncoder会抛出以下错误,例如在使用FOSUserBundle标准注册页面时注册:

"在C:\ xampp\htdocs\ascentary\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder.php第81行"C:不推荐使用'salt'选项来使用password_hash XAMPP\htdocs中\ testproject \供应商\贝哈特\贝哈特的\ src \贝哈特\试验工作\电话\处理器\ RuntimeCallHandler".

我已经跟踪了这个问题,问题是FOS UserManager类,它调用:

/**
 * {@inheritDoc}
 */
public function updatePassword(UserInterface $user)
{
    if (0 !== strlen($password = $user->getPlainPassword())) {
        $encoder = $this->getEncoder($user);
        $user->setPassword($encoder->encodePassword($password, $user->getSalt()));
        $user->eraseCredentials();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里传递$ user-> getSalt()会抛出错误,因为在php7中,不再允许您将自定义salt传递给bcrypt encoding/password_hash函数.另外,我在基本fos用户实体中看到一个问题,因为在其构造函数中,salt设置为:

$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
Run Code Online (Sandbox Code Playgroud)

问题:

(1)如何解决我上面发布的错误?也许覆盖了UserManager,或者是否有fos提供的解决方案?

(2)如何正确保护盐,即自动生成?

(3)是否还需要其他更新,例如更新ircmaxell lib?

mal*_*olm 2

升级到 Symfony3。

BCryptPasswordEncoder.php第 75 行:

if ($salt) {
    // Ignore $salt, the auto-generated one is always the best
}
Run Code Online (Sandbox Code Playgroud)

  • 来自 Symfony 食谱:__“您需要 Salt 属性吗?如果您使用 bcrypt,则不需要。否则,需要。所有密码都必须使用 salt 进行哈希处理,但 bcrypt 在内部执行此操作。由于本教程确实使用 bcrypt,因此 getSalt( User 中的 ) 方法只能返回 null(未使用)。如果您使用不同的算法,则需要取消注释 User 实体中的盐行并添加持久盐属性。“__ (2认同)