Задать вопрос
@coder_43

Переход с MD5 на SHA256 что нужно сделать чтобы работало)?

Решил сделать переход с MD5 на SHA256 загвоздка в том что вместо 1 поля у меня 2 поля SQL то есть PASSWORD и SALT(пасс, соль) подскажите как быть
Мне надо чтобы сайт считал данные с базы проверил и пустил в случае удачи
<?php 
session_start();
require_once '../functions.php';
if(isset($_POST['server']) && isset($_POST['username']) && isset($_POST['password'])){
    $name = trim($_POST['username']);
    $pass = trim($_POST['password']);
    $server = trim($_POST['server']);

    $sql = "SELECT `{$ucp_table_settings['pass']}` FROM `{$ucp_table_settings['table']}` WHERE `{$ucp_table_settings['name']}` = '$name' LIMIT 1";
			
    $statement = $db->prepare($sql);
    $statement->execute ();

    if($statement->rowCount())
    {
        $data = $statement->fetch();

        if($ucp_settings['s_md5']) $passcheck = md5($pass);
        else $passcheck = $pass;

        if($data[$ucp_table_settings['pass']] == $passcheck)
        {
            $_SESSION['User'] = $name;
            $_SESSION['Pass'] = $pass;

            echo 0;
        }	
        else echo 2;
        
    }
    else echo 1;
}
else echo 1;
?>
  • Вопрос задан
  • 331 просмотр
Подписаться 1 Простой 7 комментариев
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Проблема решается постепенным переводом пользователей на новое хранение пароля по мере их входа в систему.
В момент аутентификации пользователя нам известен его пароль, поэтому если новый хэш для пользователя не определён, то аутентифицируем его по старому методу, генерируем и сохраняем новый хэш, удаляем старый хэш.
И, конечно же, надо забыть о самодельных системах хэширования и использовать стандартные password_hash и password_verify.
Ответ написан
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Решил сделать переход с MD5 на SHA256

Первая ошибка.
Переходить нужно сразу на password_hash
На переходный период реализовать две системы аутентификации. Сначала пробуете по старой (md5), если неудача, то password_verify
После удачной аутентификации хешируете пароль новым алгоритмом.
Ответ написан
Комментировать
Согласен с обоими ответившими. Дополню, как конкретно я бы сделал.

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

Можно, например, для нового хеша завести новое поле в базе с дефолтным null.

Когда юзер пытается залогиниться своим паролем, смотрим, если в новом поле null, то проверяем аутентификацию по старой схеме, но генерируем новый хэш по новой схеме (password_hash), записываем его в новое поле.
А если в новом поле уже не null, то, значит, пользователь уже на новой схеме, и продолжаем аутентификацию уже с новым хэшем (password_verify).

Таким образом, имея два поля, нам будет очень легко увидеть всех, кто ещё не перешёл на новую схему. Мы сможем в дальнейшем, после окончания запланированного периода перехода, информировать таких пользователей, что они обязаны до какого-то определенного времени войти в систему, иначе им придется пройти заново процесс создания нового пароля.

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

Да, и не удаляя сразу данные из старого поля, мы всегда сохраняем возможность вернуться на старую схему, если вдруг обнаружили какую-то дыру в безопасности нашего нового метода.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы