如何手动对密码加密

3.4 版本
维护中的版本

由于历史原因,Symfony使用了“password encoding” 一词,但它真正指的是“password hashing”。“encoders”实际上是 Cryptographic hash functions(加密函数)。

如果,比如,你把用户存到数据库中,你需要在插入用户信息之前对其密码进行加密。不管对User对象使用什么算法,在控制器中的密码加密都是通过以下方式来决定:

1
2
3
4
5
6
7
8
// whatever *your* User object is
// 无论 *你的* User 对象是什么 
$user = new AppBundle\Entity\User();
$plainPassword = 'ryanpass';
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $plainPassword);
 
$user->setPassword($encoded);

要让程序能够执行,确保在 app/config/security.yml 文件中的 encoders 键下,为你的User类(如 AppBundle\Entity\User)配置了encoder。

$encoder 对象也有一个 isPasswordValid 方法,以 User 对象作为第一个参数,以要检测的明文密码作为第二个参数。

当你让用户提交一个明文密码(如 注册表单、密码修改表单)时,你必须 要有“确保密码不多于4096字符”的验证(步骤)。更多细节参考 如何实现一个简单的注册表单

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)