Symfony PHP中手动加密用户密码

6

我需要手动加密密码,方式要与Symfony相同。

$user->setPlainPassword($password);
$userManager->updateUser($user);

这是保存用户密码的应用程序代码。但显然它是加密的(不像方法所说的那样是明文)。

我如何手动获取给定密码的相同结果?

编辑1:

问题在于,我想在用户控制器代码中手动验证用户。我有可读的用户名和密码,作为参数传入。如果它们不存在于数据库中,我想返回401。


1
你用这个密码是干什么的? - zaph
https://symfony.com/doc/current/components/security/authentication.html#using-password-encoders - yceruto
你不需要密码,你需要一个密码验证器。密码验证器是密码的一种表示形式,无法反转以恢复密码。在创建时,密码通过验证器运行并保存结果。在验证时,要验证的密码再次通过验证器运行,并将结果与保存的验证器进行比较。对于PHP来说,有一对简单而安全的方法:password_hash()password_verify()。请参见密码hashverify - zaph
不要加密密码,当攻击者获取数据库时,他也会得到加密密钥。仅使用哈希函数是不够的,只添加盐对安全性的提升也很有限。使用一个带有随机盐的HMAC迭代约100毫秒,并将盐与哈希一起保存。使用诸如ehashPBKDF2Bcrypt或类似的函数。重点是让攻击者花费大量时间通过暴力破解来查找密码。 - zaph
请参考此答案了解有关密码验证的更多信息。 - zaph
显示剩余2条评论
3个回答

27

Symfony有一个有用的命令,可以以与其相同的方式对密码进行编码:

bin/console security:encode-password 'your_plain_password' 'AppBundle\Entity\YourUserClass'

2
@eomeroff 你可以查看 security:encode-password 的源代码来了解他们是如何做的。认真点,别这么懒。 - zerkms
@eomeroff 获取一个IDE,以便快速浏览代码。对于Symfony,我们主要使用PHPStorm。 - Omar Tariq
或者只需在Symfony控制台中查找可能的命令,就像Bonjour一样简单 ;) - Irwuin

13
在较新的Symfony版本(5.3+),您可以通过运行CLI命令来执行此操作:
bin/console security:hash-password

9
在你的控制器动作中尝试以下代码:
$encoder = $this->get('security.encoder_factory')->getEncoder($userClass);
$encodedPassword = $encoder->encodePassword($plainPassword);

你也可以使用 UserPasswordEncoderInterface 类:https://symfony.com/doc/4.0/security/password_encoding.html - Breith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接