我需要手动加密密码,方式要与Symfony相同。
$user->setPlainPassword($password);
$userManager->updateUser($user);
这是保存用户密码的应用程序代码。但显然它是加密的(不像方法所说的那样是明文)。
我如何手动获取给定密码的相同结果?
编辑1:
问题在于,我想在用户控制器代码中手动验证用户。我有可读的用户名和密码,作为参数传入。如果它们不存在于数据库中,我想返回401。
我需要手动加密密码,方式要与Symfony相同。
$user->setPlainPassword($password);
$userManager->updateUser($user);
这是保存用户密码的应用程序代码。但显然它是加密的(不像方法所说的那样是明文)。
我如何手动获取给定密码的相同结果?
编辑1:
问题在于,我想在用户控制器代码中手动验证用户。我有可读的用户名和密码,作为参数传入。如果它们不存在于数据库中,我想返回401。
Symfony有一个有用的命令,可以以与其相同的方式对密码进行编码:
bin/console security:encode-password 'your_plain_password' 'AppBundle\Entity\YourUserClass'
security:encode-password
的源代码来了解他们是如何做的。认真点,别这么懒。 - zerkmsbin/console security:hash-password
$encoder = $this->get('security.encoder_factory')->getEncoder($userClass);
$encodedPassword = $encoder->encodePassword($plainPassword);
UserPasswordEncoderInterface
类:https://symfony.com/doc/4.0/security/password_encoding.html - Breith
password_hash()
和password_verify()
。请参见密码hash和verify。 - zaphehash
,PBKDF2
,Bcrypt
或类似的函数。重点是让攻击者花费大量时间通过暴力破解来查找密码。 - zaph