php - 在旧用户的 symfony2 security.yml 中使用 MD5

标签 php symfony hash

我有一个遗留系统,其中包含 md5 散列密码。我已经测试过它们是正确的,并且它们不使用盐。

安全.yml

security:
    encoders:
        Namespace\MyBundle\Entity\User:
            algorithm: md5
providers:
    entityUsers:
        entity: { class: NamespaceBundle:User, property: username }

在我的用户实体中,我实现了 UserInterface 并确保salt 设置为空字符串

但我在尝试进行身份验证时遇到了错误凭证错误。

我尝试将 security.yml 切换为纯文本并输入哈希值,系统运行正常。

md5 应该可以正常工作吗?

最佳答案

我遇到了完全相同的问题,不得不深入研究代码以找出原因。

您不需要创建自定义编码器。

默认情况下,Symfony 2.5 中的 MessageDigestPasswordEncoder 编码器(Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder)——可能还有所有 Symfony 2 版本——计算 MD5原始密码的散列,使用/不使用盐,如预期的那样,然后重新散列 MD5 多次(在 Symfony 2.5 中默认为 5000 次)。为了让事情更令人兴奋,默认情况下,编码器还将对哈希进行 base64 编码。这两个功能都给我带来了问题。

您可以通过在 security.yml 中禁用重新哈希和/或禁用 base64 编码来解决问题,因此:

security:
    encoders:
        Namespace\Of\Your\User: 
            algorithm: md5
            encode_as_base64: false
            iterations: 0

希望能为您节省一些时间。

关于php - 在旧用户的 symfony2 security.yml 中使用 MD5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18739101/

相关文章:

php - Magento 自定义查询将变量添加到电子邮件主题和正文

javascript - JSnice 如何进行重命名 Javascript 变量的 STATISTICAL RENAMING?

php - 为什么 Symfony2 日志文件指定的时间与服务器时间不同?

c# - c#如何计算出对象的哈希码?

c# - 在 C# 中可靠地重现在 PHP 中实现的遗留密码哈希方法

php - 如何设置默认图像

PHP MySQLi fetch "array push"覆盖数据

添加: The Doctrine type of the . ...时出现Symfony EasyAdmin 3.x ManyToMany错误...字段为 "4",EasyAdmin尚不支持

php - 履带式+喷口 : Accessing to form

bash - Bash 中的多维关联数组