Задать вопрос
@Galdar
Web, JS, PHP, NGINX, Linux

В чем проблема, е могу понять (Шифрование по MD5)?

Есть скрипт регистрации и скрипт авторизации. И там и там хеширует пароль, только вот в регистрации хеш по одному, а в авторизации по другому. Как так происходит??

Регистрация
if($checkEmail == true && $checkLogin == true && $checkPassword == true && $checkName == true  && $roleWeb != 'default') {
        $result::connectTables("INSERT INTO "._TABLE_STAFF_."(email, name, login, pass, roleweb, name_role, date_regist) 
            VALUES (
            '".$email."',
            '".$name."',
            '".$login."',
            MD5('".$password._GARBAGEKEY_."'),
            '".$roleWeb."',
            '".$nameRole."',
            '".$datelocal."'
            )");
        echo "<h6>Сотрудник добавлен!</h6>";
        $result::MySQLClose();
    }
Авторизация
<?

if($outAccount != 1){
    require_once'_mysql.php';
    $result = new baseConnect();
    $email = $_POST['email'];
    $pass = $_POST['pass'];
    $datelocal = date('Y-m-d h:i:s');
    $checkPassword = false;

    if(strlen($pass) != 0){
        // Проверка пароля
        if(preg_match( '/^\S*(?=\S{12,25})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$/i',$pass)){
            $checkPassword = true;
            $password = MD5($pass._GARBAGEKEY_);
        }else{
            $error2 = "<p>Пароль не соответствует требованиям. Пожалуйста исправьте!</p>";
        }
    }else{$error1 = "<p>Поле с Паролем пустое.</p>";}

    echo $email." ".$password;

    if($checkPassword == true){
        $res = $result::connectTables("SELECT email, pass FROM "._TABLE_STAFF_);
        while( $e = mysqli_fetch_assoc($res) ) {
            if($e['email'] == $email && $e['pass'] == $password){

                $result::connectTables("INSERT INTO "._TABLE_STAFF_."(date_input) VALUES ('".$datelocal."')");
                $result::MySQLClose();
                $_SESSION['email'] = $email;
                $_SESSION['pass'] = $password;
            }
        }
    }
}else{
    session_start();
    session_unset();
    session_destroy();
    $outAccount = 0;
}


?>


В конце добавляет от 2-х до 3-х символов. (Р2c925b19e4ec95e3fa05c42efd26a6200c - допустим это генерация пароля при регистрации, а это при авторизации Р2c925b19e4ec95e3fa05c42efd26a6200cf10 - в конце добавляет постоянно какие-то символы, откуда они я недоумеваю... ) при вводе пробелов точно нет
  • Вопрос задан
  • 124 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
У вас, похоже, ограничена длинна поля в БД. Вот весь хэш и не влезает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Не используйте самописные методы. Давно уже есть password_hash() и password_verify().
А вообще, вытягивать всех пользователей из таблицы - это, мягко говоря, выглядит странно. Достаточно запросить пользователя с указанным логином и, если таковой найдётся, проверить его пароль.
И как у вас в базе задано поле `pass`?
Ответ написан
irishmann
@irishmann
Научись пользоваться дебаггером
В одном случае MD5 делает MySQLi, во втором PHP
Ответ написан
heksen
@heksen
Так как md5 легко ломается. Дополнительные символы в конце пароля это скорее всего соль для затруднения взлома. Там даже указано _GARBAGEKEY_.
Ответ написан
Ваш ответ на вопрос

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

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