我们正在将我们的一个应用程序从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)
但不起作用。任何想法都会非常有用。
答案 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
获取