我需要比较用户输入的密码是否有效。我如何获得sha512加密。我也在我的项目中使用FOSUserBundle。
答案 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。