Я изменил свой сайт на 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
Благодарю.
Поскольку хеширование является односторонней функцией, вы не можете просмотреть базу данных и преобразовать старые хэши в новые хэши Laravel (bcrypt).
Вам, вероятно, придется внедрить аутентификацию дважды и работать над перемещением пользователей при входе в новую систему. Я бы предложил добавить поле базы данных, чтобы представить, был ли пароль преобразован в новую систему или нет, и на основании этого использовать два механизма входа в систему.
На основании адреса электронной почты или имени пользователя найдите пользователя в базе данных и посмотрите, используют ли они старую или новую систему аутентификации. Если это старая система, проверьте пароль, используя существующую аутентификацию, и, если все проверено, войдите в систему, используя Auth::loginUsingId($userId)
, У нас также есть возможность обновить пользователя до новой системы аутентификации, поскольку в запросе по-прежнему доступен пароль в виде открытого текста. Запустите это через Hash::make($plaintext)
и сохраните его, и запишите в поле auth version, что пользователь был переведен.
Если пользователь использует новую аутентификацию, используйте Hash::check($plaintext, $hashedPassword)
чтобы проверить пароль и, как и прежде, войдите с Auth::loginUsingId($userId)
,
Вы также можете посмотреть на простирающийся Laravel, чтобы вы могли использовать Auth::attempt()
и пусть он определит, какой алгоритм хеширования использовать под капотом.
То, что я хотел бы сделать, это перенести данные в новую систему, затем создать новую систему, а затем отправить всем пользователям запрос на сброс пароля из учетной записи администратора (с использованием некоторого сценария). Чтобы они могли сбросить свои пароли, используя алгоритм новой системы в новой базе данных.
Это как перерегистрация паролей в новой базе данных.
Неважно, что это за соль, вы всегда можете попросить пользователя повторно ввести свой пароль.