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

Последнее сообщение от EugeneS

  1. EugeneS
  2. EugeneS
    16 символом мало 1) Это не символы, а байты. 2) Ничего там не мало. Размер хеша 128 бит == 16 байт Но все же, теряется же часть пароля. Выставляю 32 появляются нули - по сути на который насрать. Так хоть пароль не режется, но в клиенте авторизация перестает работать. Меня интересует именно функция md5 почему она отдает вопросики??? Хотя по сути указана кодировка UTF-8. Уже не лезем к БД уже сам PHP не понятен. Код выкладываю: <?php mb_internal_encoding("UTF-8"); //Указал кодировку для PHP $link = mysql_connect('localhost', 'root', '5574793') or die ("Невозможно подключиться"); mysql_select_db ("pw") or die ("Невозможно открыть $db"); mysql_query("SET NAMES 'utf8'"); //Если убрать будут вопросики и все будет работать, но убирать нельзя. $query = "SELECT * FROM users WHERE ID=\"48\""; $result = mysql_query ( $query ); $n = mysql_num_rows ( $result ); for ( $i=0; $i<$n; $i++ ) { $row = mysql_fetch_array($result); $Salt = md5($row[name].$row[idnumber], true); echo "Хеш из БД: $row[passwd]<br>Логин: $row[name]<br>Пароль: $row[idnumber]<br>Сгенерированный хеш: $Salt<br>"; if($row[passwd] == $Salt) { echo "Заебись"; } } mysql_close($link); ?> Ответ: Хеш из БД: vÈçM®M¢Ç³í²‘ÌÒ§£ Логин: admin Пароль: 5574793 Сгенерированный хеш: v��M�M�dz����ҧ�
    Сообщение от: EugeneS, 29 май 2016 в разделе: PW Вопросник
  3. EugeneS
  4. EugeneS
  5. EugeneS
  6. EugeneS
  7. EugeneS
    Какой кодировке? Это вообще бинарные данные. Аргумент true в md5() заставляет отдать хеш в сыром виде, не преобразовывая в текстовый. О да, это то что надо. Только вот с кодировкой беда теперь точно. т.к. md5(соль,true); отдаем строку "v��M�M�dz����ҧ�" я вытащил хеш из бд не указав кодировку utf-8 все сошлось, но если вытаскивать указав utf-8 (mysql_query("SET NAMES 'utf8'");) то вместо � нужные символы. Вообще вопрос, где я не указал кодировку urf-8 в php (mb_internal_encoding("UTF-8"); есть)? Огромное спасибо всем! Вытаскиваешь из базы данных пароль, клеешь новый пароль — сравниваешь. Я ещё не видел, чтобы руками доставали пароль из бд и в бинарном виде пытались его засунуть как текстовую переменную. о_____О Я так и делаю: <?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($Salt, true); echo "Хеш из БД: $row[passwd]<br>Пароль: $row[idnumber]<br>Логин+Пароль хеш: $Salt"; } mysql_close ( $link ); ?> Ответ получаю: Хеш из БД: vÈçM®M¢Ç³í²‘ÌÒ§£ Пароль: 5574793 Логин+Пароль хеш: v��M�M�dz����ҧ� Сравниваю... Не сходится Убираю из кода "mysql_query("SET NAMES 'utf8'");" все работает как надо Хеш из БД: v��M�M�dz����ҧ� Пароль: 5574793 Логин+Пароль хеш: v��M�M�dz����ҧ� но убирать это нельзя т.к. будут проблемы с русскими символами из БД
    Сообщение от: EugeneS, 26 май 2016 в разделе: PW Вопросник
  8. EugeneS
  9. EugeneS
    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-й судя по дампу Это я знаю. Но проблемка в том что в БД хеш храниться в непонятной мне кодировке или "шифре" который просто не вытащить от туда. Если сравнивать все 3 типа с хешем из бд, они просто не подойдут. vÈçM®M¢Ç³í²‘ÌÒ§£ - в основном вопрос как мне вытащить из этой какахи хеш нормальный, или хеш превратить в это. Что бы я мог реализовать авторизацию в ЛК не создавая столбец с обычным хешем. Это был бы выход из ситуации, юзать тот же password_hash(), но считаю что надо делать как то правильнее что ли. Наверное я тут уже всем надоел... Ладно пойду дальше искать решение. p.s. сборка http://mmorpg-devs.ru/threads/pw-1-5-1-full-installation.18745/
    Сообщение от: EugeneS, 25 май 2016 в разделе: PW Вопросник
  10. EugeneS
  11. EugeneS
    Кодировка пароля зависит от сервиса authd. Как он читает пароли, так регистрация его и шифрует (если сборка нормальная). Смотри код регистрации, прилагающейся к твоей сборке. По нему изначально и делал. И как бы код который там выдает то значение которое мне нужно, но вот что с ним происходит в самой бд? Как его так крючит. Код прилагается: <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>
    Сообщение от: EugeneS, 25 май 2016 в разделе: PW Вопросник
  12. EugeneS
  13. EugeneS
  14. EugeneS
  15. EugeneS
    Пишу ЛК на 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 "Них*я не гуд"; } ?> Ответ получаю: vÈçM®M¢Ç³í²‘ÌÒ§£ ||| 1234567 -> 0x0287040c474dbf44cdeb17eebb99d828 -> MHgwMjg3MDQwYzQ3NGRiZjQ0Y2RlYjE3ZWViYjk5ZDgyOA== Них*я не гуд Уже день убил, мне кажется что PhpMyAdmin хеш не правильно показывает, может быть такое? 2. Есть ли у кого-нибудь чистая БД без лишних, не нужных, столбцов? Буду благодарен такой штучке, т.к. удалять методом тыка - не очень. UPD: Скачал регу, в принципе понял по 1 вопросу. Но почему пароли из БД получаю в виде иероглифов, а не хеша??
    Автор темы: EugeneS, 24 май 2016, ответов - 38, в разделе: PW Вопросник