将密码与Symfony 2生成的Hashed+Salt进行比较


Compare password with Hashed + Salt generated by Symfony 2

我正在尝试对Symfony 2生成的Mysql数据库中的用户进行身份验证。在Security.yml中,我有这个:

security:
    encoders:
        "FOS'UserBundle'Model'UserInterface": sha512

在用户表中有两个字段:SaltPassword

所有密码都是这样的:

YqkYUe0pV/TAw12aG2UcBax0hnJNeHez/S0uBGbnDDBxWD2Yeetqm4DfMn/8WKILIeRpM7ncTJ9coYOiNPGeOA==

我正在开发一个使用PHP对用户进行身份验证的Web服务。我不知道我必须使用哪些函数来比较纯密码和加密密码?

您必须从容器中获取密码编码器工厂。

你可以这样做:

$factory = $container->get('security.encoder_factory'); //$container refers to your container, it can be also $this->container
$user = new Your'Bundle'Entity'User();
$encoder = $factory->getEncoder($user);
$encodedPassword = $encoder->encodePassword($nonEncodedPassword, $user->getSalt());

这应该足够了。当然,您可以"手动"将第二个encodePassword参数设置为用于编码所有pasword的salt。它通常在用户实现类中定义,这就是为什么我们在这里给出一个实体实例化对象。

这是处理Symfony2 中sha512加密的类

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Core/Encoder/MessageDigestPasswordEncoder.php