Symfony2:如何生成密码的sha512哈希值?

时间:2012-03-30 07:50:35

标签: php hash symfony fosuserbundle sha512

我需要比较用户输入的密码是否有效。我如何获得sha512加密。我也在我的项目中使用FOSUserBundle。

3 个答案:

答案 0 :(得分:10)

在您的控制器中,您可以这样做(假设您将sha512设置为app/config/security.yml中的编码算法)

    $userName = 'username';
    $password = "pass";
    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->loadUserByUsername($userName);
    $encoder = $this->get('security.encoder_factory')->getEncoder($user);
    $encodedPass = $encoder->encodePassword($password, $user->getSalt());
    echo $user->getPassword() === $encodedPass;

答案 1 :(得分:2)

Symfony有几种不同的存储密码的方法。哈希和检查密码的逻辑存储在几个"Encoder" classes

在密钥encoder下使用了哪一个can be configured in security.yml。如果这显示为sha512,则您使用的是MessageDigestPasswordEncoder

不同用户类型的编码器类型可以不同。要为用户获取正确的编码器,您可以询问EncoderFactory。这已经在UserPasswordEncoder中为您完成了:您将用户和普通密码传递给UserPasswordEncoder->isPasswordValid,并使用属于该用户的正确编码器检查密码。这是检查用户密码的最简单界面。

如果您真的想知道SHA512哈希的工作原理,可以查看MessageDigestPasswordEncoder。它是一个字符串combines the salt and password,如“password {salt}”。它计算此string 5000 times的哈希值。这是为了使密码哈希缓慢,所以不容易暴力破解。

检查密码是否有效时,it uses hash_equals。这是一个恒定时间比较,可以防止对密码哈希的定时攻击。

答案 2 :(得分:1)

如果您确定需要SHA512,请尝试this