簡體   English   中英

在舊版用戶的symfony2 security.yml中使用MD5

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM