1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

1.5.1 (101) [PHP, MySql]БД, шифрование пароля

Тема в разделе 'PW Вопросник', создана пользователем EugeneS, 24 май 2016.

  1. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    Пишу ЛК на PHP, возникли вопросы с БД.
    Как шифруются пароли?
    Вот как показалось мне
    PHP:
    <?php
        $Hash 
    "vÈçM®M¢Ç³í²‘ÌÒ§£"//Хеш из БД
        
    $Login "admin";//Логин пользователя
        
    $Pass "1234567"//Допустим такой пароль
        
    $Salt $Login.$Pass;
        
    $Salt md5($Salt);
        
    $Salt "0x".$Salt;
        
    $vBase base64_encode($Salt); //Ну мало ли я и так попробовал(хоть и не видел этого в reg.php)
        
    echo "$Hash ||| $Pass -> $Salt -> $vBase <br>";
        if(
    $Hash == $vBase){
            echo 
    "Good! $vBase";
        }elseif(
    $Hash == $Salt){
            echo 
    "Good! $Salt";
        }else{
            echo 
    "Них*я не гуд";
        }
    ?>
    Ответ получаю:
    Уже день убил, мне кажется что PhpMyAdmin хеш не правильно показывает, может быть такое?

    2. Есть ли у кого-нибудь чистая БД без лишних, не нужных, столбцов?
    Буду благодарен такой штучке, т.к. удалять методом тыка - не очень.

    UPD: Скачал регу, в принципе понял по 1 вопросу. Но почему пароли из БД получаю в виде иероглифов, а не хеша??
    Последнее редактирование: 24 май 2016
  2. werewolf Old school Пользователи

    Сообщения:
    507
    Лайки:
    158
    Пол:
    Мужской
    Репутация:
    1
    Не понял, причем тут БД, но вот, держи.

    Вложения:

    • pw.zip
      Размер файла:
      3,4 КБ
      Просмотров:
      11
    EugeneS нравится это.
  3. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    https://gyazo.com/5adbbe19936ef0de4902eb5a92035ae7 ну вот пароль зашифрованный в БД, я ведь правильно понимаю? Вот как мне хеши сравнивать при авторизации в ЛК, я не могу получить эти иероглифы

    За чистую БД спасибо:)
  4. werewolf Old school Пользователи

    Сообщения:
    507
    Лайки:
    158
    Пол:
    Мужской
    Репутация:
    1
    Что-то с кодировкой в браузере похоже.
    EugeneS нравится это.
  5. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    Зашел с разных браузеров - не помогло. Ведь я правильно понял, что пароли хранятся в виде 0x0287040c474dbf44cdeb17eebb99d828 если через md5 хешируются?
  6. werewolf Old school Пользователи

    Сообщения:
    507
    Лайки:
    158
    Пол:
    Мужской
    Репутация:
    1
    Да, либо
    Код:
    $Salt = base64_encode(md5($Login.$Pass, true));
    EugeneS нравится это.
  7. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    Не то. В PW же по сути utf-8 кодировка используется?
    pw.sql тоже прошарил, не увидел там ничего похожего на хеширования пароля. Ну ведь игра получает пасс и я логинюсь на аккаунт, а вот создать хеш такой же не могу... Причем заметил что они все разные, хотя на всех 3 акках используется один и тот же пароль. Crypt???
    --- добавлено: 25 май 2016 в 01:10 ---
    Вроде был пост с hex? Но его удалили. Да я забыл про то что логины то разные, по этому и хеши разные.
    PHP:
    echo "0x".bin2hex(md5($login.$pass))
    Вернул: 0x3736633865373464616534646132633762336564623239316363643261376133

    Я так понял, что с таким говном я единственный столкнулся. Бред какой-то честн слово.
    Последнее редактирование модератором: 1 июн 2016
  8. JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    948
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    Кодировка пароля зависит от сервиса authd. Как он читает пароли, так регистрация его и шифрует (если сборка нормальная). Смотри код регистрации, прилагающейся к твоей сборке.
    EugeneS нравится это.
  9. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    По нему изначально и делал. И как бы код который там выдает то значение которое мне нужно, но вот что с ним происходит в самой бд? Как его так крючит. Код прилагается:
    PHP:

                <div class="clear"></div>

                <small></small>

                <div class="clear"></div>

                <div class="entry">

    <?
    include_once('config.php');
    $mysqlhost = $DBHost; //Put your MySQL IP/URL here. (Usually localhost or 127.0.0.1)
    $mysqluser = $DBUser; //Put your MySQL username here.
    $mysqlpass = $DBPassword; //Put your MySQL password here.
    $mysqldb = $DBName; //Put your MySQL database name here.

    if (isset($_POST['register'])) //If the register button was pressed on the form, execute the below script.
        {
            $Link = MySQL_Connect($mysqlhost, $mysqluser, $mysqlpass) or die ("<center>Could not connect to MySQL.</center>"); //Connects to your MySQL server using the parameters you specified above.
            MySQL_Select_Db($mysqldb, $Link) or die ("Database ".$mysqldb." does not exists."); //Connects to the MySQL database you specified above.

            $Login = $_POST['login'];
            $Pass = $_POST['passwd'];
            $Repass = $_POST['repasswd'];
            $Email = $_POST['email']; //The above grabs the information entered in the form and puts it to PHP variables.
                  $pass = $_POST['idnumber'];
                    $ip = $_POST['$ip'];
                 
            $Login = mysql_real_escape_string(StrToLower(Trim($Login)));
            $Pass = mysql_real_escape_string(StrToLower(Trim($Pass)));
            $Repass = mysql_real_escape_string(StrToLower(Trim($Repass)));
            $Email = mysql_real_escape_string(Trim($Email)); //The above strips the information into lower case and adds SQL inject protection.
            $idnumber = mysql_real_escape_string(StrToLower(Trim($Pass)));
                    $ip = $_SERVER['REMOTE_ADDR'];
            if (empty($Login) || empty($Pass) || empty($Repass) || empty($Email)) //Checks to make sure all the fields have been entered.
                {
                    echo "<center><b>Что то забыл, еще разок попробуй.<b></center><br />"; //If the fields haven't been entered, display this message.
                }   
            else
                {
                    $Result = MySQL_Query("SELECT name FROM users WHERE name='$Login'") or ("<center>Мы не можем проверить логин, не надо издеваться над системой и так хромает!</center>"); //Checks the entered username against the database for a match.

                    if (MySQL_Num_Rows($Result))
                        {
                            echo "<center><b>Логин <b>".$Login."</b> уже кто-то использует. Придумай другой.<br /></b></center>"; //If the username already exists, display this message.
                        }
                    elseif ($Pass != $Repass) //Checks the entered passwords against eachother for a match.
                        {
                            echo "<font color='red'><center>Стоп, пароли должны быть одинаковыми. Попробуй еще раз!</center><br />"; //If they don't match, display this message.
                        }
                    else //If there were no errors, continue with registration.
                    {
                        $Salt = $Login.$Pass;
                        $Salt = md5($Salt);
                        $Salt = "0x".$Salt; //Salts the password in md5.
                        MySQL_Query("call adduser('$Login', $Salt, '0', '0', '0', '$idnumber', '$Email', '$ip', '0', '0', '0', '0', '0', '0', '', '0', '')") or die ("Can't execute query."); //Writes the information into the database.
                        echo "<center><b>game username <b>".$Login."</b> created successfully!</b></center><br />"; //Message to say the registration was successful.
                    }       
    }   
    }

    error_reporting(0)
    ?>

                <center><form action="#" method="post">

                    <center><h4>Логин</h4></center>
    <input id="username" name="login" size="50" type="text" />

                    <br><center><h4>Пароль</h4></center>
    <input id="password" name="passwd" size="50" type="password" />
    <br><center><h4>Еще раз пароль</h4></center>           
    <input id="rpassword" name="repasswd" size="50" type="password" />

    <br><center><h4>Email</h4></center>
                    <input id="email" name="email" size="50" type="text" />
    <br>

                    <input type="submit" name="register" value="Submit" />

    </form>

    </html>
  10. Гадес ОРБИТАЛЬНЫЙ ПОДЖИГАТЕЛЬ Old school Пользователи Ты здесь Господи? Это я, Дин Винчестер

    Сообщения:
    544
    Лайки:
    354
    Пол:
    Мужской
    Репутация:
    8
    Команда:
    DeBalance Art Team
    Страна:
    Russian Federation Russian Federation
    скрин из пхпмайадмина со строкой этой учетки приложи
  11. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    Код:
    VALUES (
    '48',  'admin',  'vÈçM®M¢Ç³í²‘ÌÒ§£',  '0',  '0',  '0',  '5574793',  '[email protected]',  '192.168.1.2',  '0',  '0',  '0',  '0',  '0',  '0',  '0000-00-00 00:00:00',  '2016-04-17 01:19:29',  '0', '',  '',  '', NULL ,  '5ed4701e59816a38bc74870f51fa55ce',  'Евгений',  'Саламатин',  '3',  '1',  '0.00', NULL , NULL
    );
    p.s. после null там где хеш - это уже сам добавлял

    https://gyazo.com/6aee71666797b42f7fb4c4bcf614c224
    https://gyazo.com/b8ce05b4d6f4942641aa9404f4b0f8a2
  12. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    PHP:
    switch ($auth_type) {
            case 
    1$md md5($login.$pass,true); break;
            case 
    2$md '0x'.md5($login.$pass,false); break;
            case 
    3$md base64_encode(md5($login.$pass,true)); break;
        }
    Тут пример всех 3-х типов хеша паролей пвшных. Тебе нужен 1-й судя по дампу
    EugeneS нравится это.
  13. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    Это я знаю. Но проблемка в том что в БД хеш храниться в непонятной мне кодировке или "шифре" который просто не вытащить от туда. Если сравнивать все 3 типа с хешем из бд, они просто не подойдут.
    vÈçM®M¢Ç³í²‘ÌÒ§£ - в основном вопрос как мне вытащить из этой какахи хеш нормальный, или хеш превратить в это. Что бы я мог реализовать авторизацию в ЛК не создавая столбец с обычным хешем. Это был бы выход из ситуации, юзать тот же password_hash(), но считаю что надо делать как то правильнее что ли.

    Наверное я тут уже всем надоел... Ладно пойду дальше искать решение.
    p.s. сборка http://mmorpg-devs.ru/threads/pw-1-5-1-full-installation.18745/
  14. JonMagon Программист Пользователи Open Source Contributor

    Сообщения:
    805
    Лайки:
    809
    Пол:
    Мужской
    Репутация:
    5
    Страна:
    Germany Germany
    Какой кодировке? Это вообще бинарные данные. Аргумент true в md5() заставляет отдать хеш в сыром виде, не преобразовывая в текстовый.
    EugeneS нравится это.
  15. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    О да, это то что надо. Только вот с кодировкой беда теперь точно. т.к. md5(соль,true); отдаем строку "v��M�M�dz����ҧ�" я вытащил хеш из бд не указав кодировку utf-8 все сошлось, но если вытаскивать указав utf-8 (mysql_query("SET NAMES 'utf8'");) то вместо � нужные символы. Вообще вопрос, где я не указал кодировку urf-8 в php (mb_internal_encoding("UTF-8"); есть)?

    Огромное спасибо всем!
  16. JonMagon Программист Пользователи Open Source Contributor

    Сообщения:
    805
    Лайки:
    809
    Пол:
    Мужской
    Репутация:
    5
    Страна:
    Germany Germany
    Вытаскиваешь из базы данных пароль, клеешь новый пароль — сравниваешь.

    Я ещё не видел, чтобы руками доставали пароль из бд и в бинарном виде пытались его засунуть как текстовую переменную. о_____О
  17. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    Я так и делаю:
    PHP:
    <?php
    mb_internal_encoding
    ("UTF-8");
    $link mysql_connect('localhost''root''5574793');
    mysql_select_db ("pw") or die ("Невозможно открыть $db");
    mysql_query("SET NAMES 'utf8'");

    $query "SELECT * FROM users WHERE name=\"admin\"";
    $result mysql_query $query );
    $n mysql_num_rows $result );
    for ( 
    $i=0$i<$n$i++ )
    {
        
    $row mysql_fetch_array($result);
        
    $Salt $row[name].$row[idnumber];
        
    $Salt md5($Salttrue);
        echo 
    "Хеш из БД: $row[passwd]<br>Пароль: $row[idnumber]<br>Логин+Пароль хеш: $Salt";
    }
    mysql_close $link );

    ?>
    Ответ получаю:
    Сравниваю... Не сходится
    Убираю из кода "mysql_query("SET NAMES 'utf8'");" все работает как надо
    но убирать это нельзя т.к. будут проблемы с русскими символами из БД
  18. JonMagon Программист Пользователи Open Source Contributor

    Сообщения:
    805
    Лайки:
    809
    Пол:
    Мужской
    Репутация:
    5
    Страна:
    Germany Germany
    Что у тебя делают русские символы в бд?
  19. TopicStarter Overlay

    EugeneS Пользователи

    Сообщения:
    15
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    SCTEAM
    Страна:
    Russian Federation Russian Federation
    Тикеты, группы на сайте и прочая хрень. Но не делать же для проверки пароля отдельный класс подключения к БД
  20. JonMagon Программист Пользователи Open Source Contributor

    Сообщения:
    805
    Лайки:
    809
    Пол:
    Мужской
    Репутация:
    5
    Страна:
    Germany Germany
    Не делать. Библиотека для работы с бд давно существует.
Черновик сохранён Черновик удалён
Similar Threads
  1. k0nst
    Ответов:
    9
    Просмотров:
    2.250
  2. irka
    Ответов:
    6
    Просмотров:
    2.570
  3. salitypw
    Ответов:
    6
    Просмотров:
    2.778
  4. Tыщ
    Ответов:
    1
    Просмотров:
    3.878
  5. Skotch
    Ответов:
    28
    Просмотров:
    8.005
Загрузка...

Поделиться этой страницей