Joomla 1.5 Проверка наличия регистрации клиента.Хеши не совпадают

Тема в разделе "Программирование", создана пользователем vadimled, 12.02.2010.

  1. Offline

    vadimled Недавно здесь

    Регистрация:
    02.09.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Похожая тема имеется, но ответов там нет.

    Проблема такова:
    Есть флэшка-форма, в которой клиент должен ввести логин и пароль что бы начать игру.
    Скрипт выполняющий сравнение ниже:
    Код (PHP):
    1. <?php
    2. include ("codec.php");
    3.  
    4. $name =  $_POST['name'];
    5. $password =  $_POST['password'];
    6. $i = 0;
    7.  
    8. $db = mysql_connect("localhost","myname","mypassword");
    9. mysql_select_db("mydb",$db);
    10. $fesult = mysql_query("SELECT username,password FROM jos_users",$db);
    11.  
    12. $salt  = JUserHelper::genRandomPassword(32);
    13. $crypt = JUserHelper::getCryptedPassword($password, $salt);
    14. $current = $crypt.':'.$salt;
    15.  
    16.  
    17. while($myarrey = mysql_fetch_array($fesult,MYSQL_ASSOC)){
    18.         $salt  = JUserHelper::genRandomPassword(32);
    19.         $crypt = JUserHelper::getCryptedPassword($myarrey['password'], $salt);
    20.         $db_passw = $crypt.':'.$salt;
    21.  
    22.         echo "<br>";
    23.         echo 'Введенный пароль:                  '.$password ;              
    24.         echo "<br>";   
    25.         echo 'Введенный пароль в хэше:          '.$current ;              
    26.         echo "<br>";
    27.         echo 'Пароль из базы:                   '.$db_passw;
    28.         echo "<br>";
    29.     if($current == $db_passw){
    30.         echo "<br>";
    31.         echo "Попал!";
    32.         echo "<br>";
    33.         }
    34.     else{
    35.         echo "<br>";
    36.         echo "Cтратил!";
    37.         echo "<br>";
    38.         }
    39. }
    40. mysql_close($db);
    41. ?>

    Хеши никогда не совпадают! Вопрос к знатокам:
    Что я делаю неправильно? Как их правильно сравнить?
    Какой скрипт в Joomla производит сравнение,когда логинится клиент?

    Очень надеюсь на помощь.
     
  2.  
  3. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    наверное потому, что Вы используете JUserHelper::genRandomPassword .... для каких целей ? Если не ошибаюсь, в джумле пароли захешированы с помощью md5? таким образом получим:
    Код (PHP):
    1. $name =  $_POST['name'];
    2. $password =  $_POST['password'];
    3.  
    4. $db = mysql_connect("localhost","myname","mypassword");
    5. mysql_select_db("mydb",$db);
    6. $fesult = mysql_query("SELECT password FROM jos_users WHERE name={$name}",$db);

    в результате выборки, вы получитье одну запись с одним полем - "password".
    Получим хэш введенного паролья:
    Код (PHP):
    1. $cryptPass = md5($password);

    Ну а затем просто сравним наш пароль с паролем полученным в результате запроса )
     
  4. Offline

    vadimled Недавно здесь

    Регистрация:
    02.09.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо что отозвались.
    Правильно построеный sql-запрос мне очень поможет.
    Но основная проблемма не решена.
    Не хешируют сейчас просто md5.
    Код (CODE):
    1. Введенный пароль в хэше: e4be3b8ae2fa6c99f30d0cb44d179afd:rf5ueZVxFhsfmJahgi62vtQj2vDmUFPS
    2.  
    3. Введенный пароль в хэше,но md5: 768a7954d1af355088fba2b0c0e5ab51
    4.  
    5. Пароль из базы: d629416c794bd8839f1ec90a909ac1d6:D6qUyDh6IuwO1ShI2QsvHTkMMpK28A7r

    Вот так это выглядит сейчас.Поэтому я и воспользовался тем же скриптом что и сама Joomla!
    Код (PHP):
    1. $salt  = JUserHelper::genRandomPassword(32);
    2. $crypt = JUserHelper::getCryptedPassword($password, $salt);
    3. $current = $crypt.':'.$salt;

    Класс взял из \libraries\joomla\user\helper.php
    Проблема.
    Одинаковый пароль 123456,к примеру, каждый раз в хеше разный.Как же его сравнить с базовым?
     
  5. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Действительно мд5 не канает... немного поковырялся в схеме аутентификации в джумле и получил следующее:

    Код (PHP):
    1. //Делаем запрос в БД по введеному имени пользователя
    2. $db =& JFactory::getDBO();
    3. $username = JRequest::getVar('username');
    4. $password = JRequest::getVar('password');
    5.  
    6.         $query = 'SELECT `id`, `password`, `gid`'
    7.             . ' FROM `#__users`'
    8.             . ' WHERE username=' . $db->Quote( $username )
    9.             ;
    10.         $db->setQuery( $query );
    11.         $result = $db->loadObject();
    12.  
    13. //если такой пользователь найден
    14.         if($result)
    15.         {
    16.             $parts  = explode( ':', $result->password ); // получаем хэш-пароля из БД
    17.                          // пароль состоит из двух частей значение:ключ
    18.             $crypt  = $parts[0];
    19.             $salt   = @$parts[1];
    20.                          //с помощью полученного ключа кодируем введенный, пользователем, пароль
    21.             $testcrypt = JUserHelper::getCryptedPassword($password, $salt);
    22.                         //если пароли совпали, то делаем то что нужно
    23.             if ($crypt == $testcrypt)
    24.                         {
    25.  
    26.             } //если пароль не совпал
    27.                         else
    28.                         {
    29.  
    30.             }
    31.         }//если ввели не правильное имя пользователя
    32.         else
    33.         {
    34.            
    35.         }


    Надеюсь ответил на Ваш вопрос.
     
  6. Offline

    vadimled Недавно здесь

    Регистрация:
    02.09.2009
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Великолепно! Гениально! :)))
    salt - это ключ к первой части. Вот где собака и порылась.
    Теперь работает. Огромное спасибо!
     

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

Загрузка...