Получение сырых паролей из соли

Я изменил свой сайт на Laravel и использую их метод хранения паролей.

Однако пароли всех моих старых пользователей хранились по-разному, используя соли. Моей первоначальной целью было просто запустить всех пользователей и их соли через некоторый код, чтобы получить необработанный пароль, а затем запустить их через процесс Laravel.

Однако я не могу понять, как получить необработанные пароли. Код для генерации соли и паролей был передан мне, и он был вырезан и вставлен, прежде чем я знал слишком много.

Итак, старый способ создания пароля пользователя:

// Create a salt for password
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));

// Hash for password
$password = hash('sha256', $_POST['password'] . $salt);

// Next we hash the hash value 65536 more times...
for($round = 0; $round < 65536; $round++)
{
$password = hash('sha256', $password . $salt);
}

А потом при входе в систему:

$check_password = hash('sha256', $_POST['password'] . $row['salt']);
for($round = 0; $round < 65536; $round++)
{
$check_password = hash('sha256', $check_password . $row['salt']);
}

Возможно ли с чем я должен отменить изменения и получить необработанные пароли?

Если нужно для тестирования, хешированный пароль и соль:

password: f7e98af40e141e8abdae42c6e4c3375ff7eede881678a07b18898724240035de
salt: 3eb9507334ff0ab2

Благодарю.

0

Решение

Поскольку хеширование является односторонней функцией, вы не можете просмотреть базу данных и преобразовать старые хэши в новые хэши Laravel (bcrypt).

Вам, вероятно, придется внедрить аутентификацию дважды и работать над перемещением пользователей при входе в новую систему. Я бы предложил добавить поле базы данных, чтобы представить, был ли пароль преобразован в новую систему или нет, и на основании этого использовать два механизма входа в систему.

На основании адреса электронной почты или имени пользователя найдите пользователя в базе данных и посмотрите, используют ли они старую или новую систему аутентификации. Если это старая система, проверьте пароль, используя существующую аутентификацию, и, если все проверено, войдите в систему, используя Auth::loginUsingId($userId), У нас также есть возможность обновить пользователя до новой системы аутентификации, поскольку в запросе по-прежнему доступен пароль в виде открытого текста. Запустите это через Hash::make($plaintext) и сохраните его, и запишите в поле auth version, что пользователь был переведен.

Если пользователь использует новую аутентификацию, используйте Hash::check($plaintext, $hashedPassword) чтобы проверить пароль и, как и прежде, войдите с Auth::loginUsingId($userId),

Вы также можете посмотреть на простирающийся Laravel, чтобы вы могли использовать Auth::attempt() и пусть он определит, какой алгоритм хеширования использовать под капотом.

2

Другие решения

То, что я хотел бы сделать, это перенести данные в новую систему, затем создать новую систему, а затем отправить всем пользователям запрос на сброс пароля из учетной записи администратора (с использованием некоторого сценария). Чтобы они могли сбросить свои пароли, используя алгоритм новой системы в новой базе данных.

Это как перерегистрация паролей в новой базе данных.

Неважно, что это за соль, вы всегда можете попросить пользователя повторно ввести свой пароль.

1

По вопросам рекламы ammmcru@yandex.ru