Symfony fos_user在Laravel中捆绑编码密码 - Symfony到Laravel Migration

时间:2017-08-21 13:33:33

标签: php laravel symfony security fosuserbundle

我们正在将我们的一个应用程序从Symfony 3.3迁移到Laravel 5.5,我们希望使用所有现有用户而无需更改密码。

在Symfony应用程序中,我们使用https://github.com/Nininea/XamarinAndroidPutParcelableArray对密码进行编码。

providers:
    fos_userbundle:
        id: fos_user.user_provider.username_email
encoders:
    FOS\UserBundle\Model\UserInterface: sha512

试图找出我们如何在Laravel中使用相同的算法。

尝试,password_verify

password_verify($raw, $encoded)

但不起作用。任何想法都会非常有用。

1 个答案:

答案 0 :(得分:1)

试试这个:

$raw = 'qwerty12345';
$salt = 'salt'; // $user->getSalt() users salt field

if (empty($salt)) {
    $salted = $raw;
} else {
    $salted = $raw.'{'.$salt.'}';
}

$digest = hash('sha512', $salted, true);

for ($i = 1; $i < 5000; ++$i) {
    $digest = hash('sha512', $digest.$salted, true);
}

$encoded = base64_encode($digest);

echo hash_equals($encoded, %password_from_db%);

密码经过多次哈希处理,迭代计数在SecurityBundle中设置。所有参数均可通过./bin/console debug:config SecurityBundle部分中的encoders命令获取:

    FOS\UserBundle\Model\UserInterface:
        algorithm: sha512
        hash_algorithm: sha512
        key_length: 40
        ignore_case: false
        encode_as_base64: true
        iterations: 5000
        cost: 13

此案例的密码编码代码可以从https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Core/Encoder/MessageDigestPasswordEncoder.php

获取