У меня есть старое веб-приложение с несколькими зарегистрированными пользователями, которое использует небезопасный hash("sha256", trim($_POST["password"]))
для хранения хешированного пароля в базе данных MySQL. Теперь я хочу обновить веб-приложение, чтобы использовать более защищенный BCRYPT password_hash()
, однако я не хочу отправлять всем зарегистрированным пользователям электронные письма с предупреждением об изменении их пароля. Поэтому я думал о реализации BCRYPT для хэшированного пароля sha256 () следующим образом:
Для сохранения пароля я буду sha256 () хэшировать пароль пользователя:
$hashed_password = password_hash(hash("sha256", trim($_POST["password"])), PASSWORD_BCRYPT);
Затем я сохраню хешированный пароль BCRYPT в базе данных.
И чтобы проверить пароль пользователя, я бы просто сделал это:
$hashed_password = "select hashed_password from users where email = 'abc@email.com'";
if(password_verify(hash("sha256", trim($_POST["password"])), $hashed_password))
{
echo "Welcome";
}
else
{
echo "Wrong Password!";
}
Таким образом, я просто обновлю пароль пользователя в базе данных MYSQL путем зацикливания каждого зарегистрированного пользователя, затем извлеку хэшированный пароль sha256 () и, наконец, просто заново сохраню его после того, как он был BCRYPTed с password_hash ( ):
$new_password = password_hash($old_sha256_hashed_password, PASSWORD_BCRYPT);
$mysql->save_user_password($new_password, $user_id);
Таким образом, пользователи по-прежнему смогут войти со своим старым паролем.
Что вы думаете об этом решении?
Все еще безопасно, даже если я sha256 () хеширую пароль перед BCRYPT?