[英]Using MD5 in symfony2 security.yml for legacy users
我有一个遗留系统,其中包含md5哈希密码。 我测试过这些是正确的,他们不使用盐。
security.yml
security:
encoders:
Namespace\MyBundle\Entity\User:
algorithm: md5
providers:
entityUsers:
entity: { class: NamespaceBundle:User, property: username }
在我的User实体中,我实现了UserInterface,并确保将salt设置为空字符串 。
但是在尝试进行身份验证时出现错误的凭据错误。
我已经尝试将security.yml切换到明文并输入哈希,系统工作正常。
当然md5应该有效吗?
我遇到了完全相同的问题,不得不深入研究代码以找出原因。
您无需创建自定义编码器。
默认情况下, MessageDigestPasswordEncoder
编码器( Symfony\\Component\\Security\\Core\\Encoder\\MessageDigestPasswordEncoder
在Symfony的2.5) -且可能所有的Symfony 2发布-计算原始密码的MD5哈希,使用/不使用的盐,如预期的, 和然后多次重新哈希MD5(默认为5000次,在Symfony 2.5中) 。 为了使事情更令人兴奋, 默认情况下 , 编码器还将对哈希进行64位编码 。 这两个功能都给我带来了麻烦。
您可以通过在security.yml
禁用重新散列和/或禁用base64编码来解决问题,因此:
security:
encoders:
Namespace\Of\Your\User:
algorithm: md5
encode_as_base64: false
iterations: 0
希望能为您节省一些时间。
事实证明,symfony2中的md5默认使用salt。 可能有一种更简单的方法,但我刚创建了一个忽略salt的自定义md5密码编码器接口 。
注册服务
namespace.project.md5password.encoder:
class: Namepspace\MyBundle\Services\CustomMd5PasswordEncoder
创建编码器服务
namespace Namespace\MyBundle\Services;
use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
class CustomMd5PasswordEncoder implements PasswordEncoderInterface
{
public function __construct() {
}
public function encodePassword($raw, $salt) {
return md5($raw);
}
public function isPasswordValid($encoded, $raw, $salt) {
return md5($raw) == $encoded;
}
}
在security.yml中使用新服务
security:
encoders:
Namespace\MyBundle\Entity\User:
id: namespace.project.md5password.encoder
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.