1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

Какой алгоритм хэширования паролей в joomla 1.5.13 ?

Тема в разделе "Joomla", создана пользователем Sammerset, 11 авг 2009.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
Статус темы:
Закрыта.
Модераторы: arman29, DMS, NightHunter
  1. Sammerset

    Sammerset Постоялец

    Регистр.:
    14 сен 2008
    Сообщения:
    136
    Симпатии:
    10
    Ребята! Подскажите если кто знает.
    У меня возникла проблема - я установил joomla 1.5.13 и phpBB3 3.0.5
    В общем, накинул мост на них, по указаниям на следующей странице - http://www.phpbbchina.com/forum/viewtopic.php?f=4&t=4048.
    Всё работает, всё классно.
    Но теперь я захотел установить чат (компонент) Yos Ajax Chat 1.0. Он встал превосходно, всё классно. Но при залогинивании может авторизоваться только админ и пользователи, которые регались в джуме до установки моста.
    Я решил узнать в чём проблема - а проблема в том, что мост (а именно плагин)при регистрации прописывает в базе только password_clear - а это равнозначно, что ничего не прописывает. Пустое место. Привожу эту проблему:
    _______________________________________________________________
    PHP:
    /**
         * This method will return a user object
         *
         * If options['autoregister'] is true, if the user doesn't exist yet he will be created
         *
         * @access    public
         * @param   array   holds the user data
         * @param     array   array holding options (remember, autoregister, group)
         * @return    object    A JUser object
         * @since    1.5
         */
        
    function &_getUser($user$options = array())
        {
            
    $instance = new JUser();
            if(
    $id intval(JUserHelper::getUserId($user['username'])))  {
                
    $instance->load($id);
                return 
    $instance;
            }
            
    //TODO : move this out of the plugin
            
    jimport('joomla.application.component.helper');
            
    $config   = &JComponentHelper::getParams'com_users' );
            
    $usertype $config->get'new_usertype''Registered' );
            
    $acl =& JFactory::getACL();
            
    $instance->set'id'            );
            
    $instance->set'name'            $user['fullname'] );
            
    $instance->set'username'        $user['username'] );
            
    $instance->set'password_clear'    $user['password_clear'] );
            
    $instance->set'email'            $user['email'] );    // Result should contain an email (check)
            
    $instance->set'gid'            $acl->get_group_id''$usertype));
            
    $instance->set'usertype'        $usertype );
            
    //If autoregister is set let's register the user
            
    $autoregister = isset($options['autoregister']) ? $options['autoregister'] :  $this->params->get('autoregister'1);
            if(
    $autoregister)
            {
                if(!
    $instance->save()) {
                    return 
    JError::raiseWarning('SOME_ERROR_CODE'$instance->getError());
                }
            } else {
                
    // No existing user and autoregister off, this is a temporary user.
                
    $instance->set'tmp_user'true );
            }
            return 
    $instance;
        } 
    ____________________________________________________________
    Переменную $user['password_clear'] можно сменить на $user['password'] - и тогда в базу будет прописываться не прикрытый ничем пароль, указанный пользователем при регистрации.
    Если бы это была джума 1.0.15 - тогда можно было-бы просто сделать так - md5 ($user['password']) - и всё было бы гуд.
    В базу пойдёт хэш. И компонент согласован.
    Проблема в джуме 1.5.13 - там не просто один мдэшник стоит.
    Вопрос, господа знатоки - как зашифровать $user['password'] точно так же, как и при регистрации? (Получить нормальный хэш?)
    Как, имея просто открытый пароль, закинуть его в хеш ? (joomla 1.5.13 only!!!:(bc:
     
  2. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    Хеш записывается с солью, т.е. $hash=($salt.$password)
    Для каждой установке джумлы генериться своя соль. Вот где она лежит точно не помню, ищи... возможно в конфиге

    UPD. /configuration.php - свойство $secret
     
    Sammerset нравится это.
  3. Sammerset

    Sammerset Постоялец

    Регистр.:
    14 сен 2008
    Сообщения:
    136
    Симпатии:
    10
    Кроме этого в конфиге не нашёл ничего:



    PHP:
    $secret 'Am9HAaHBS4GxhNwz';
    Сейчас ещё покопаюсь...
    А эта самая $salt - после установки она остаётся константой что-ли? В смысле при каждой регистрации берётся одна и та же соль?

    $hash=($secret.$password) - будет так, я правильно понимаю?
     
  4. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    Да, все верно. Правда выше забыл еще md5. Т.е. будем md5($secret.$password)
    Возможно стоит поменять местами $secret и $password, не помню точно.
    Проверь на своем админском пароле.

    Соль константа, да
     
  5. Sammerset

    Sammerset Постоялец

    Регистр.:
    14 сен 2008
    Сообщения:
    136
    Симпатии:
    10
    У меня в базе лежит такой хэш:

    173e5028d064bff633bda48601d2ec7c:mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk

    Это пароль семь единиц (1111111).
    Будем пробывать. :ay:

    Я тут ещё одну ссылочку нарыл : - и вообще запутался, мля
    http://dimoning.ru/dobavlenie-polzovatelya-v-joomla-159-cherez-bazu-dannyih.html

    Вот такой хэш получился у меня : ccba884fcea1d936340c64582f32090c при md5($pass.$salt)
    и такой при md5($salt.$pass) 633512fc554dbf99f162fedfecab3a57 .

    Естественно, это не 173e5028d064bff633bda48601d2ec7c:mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk.
    Откуда вторая часть?
     
  6. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    173e5028d064bff633bda48601d2ec7c = md5('1111111'.'mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk')

    Соль все таки генерируется всегда рэндомно, сорри. И записана через двоеточие в пасворде
     
  7. Sammerset

    Sammerset Постоялец

    Регистр.:
    14 сен 2008
    Сообщения:
    136
    Симпатии:
    10
    173e5028d064bff633bda48601d2ec7c = md5('1111111'.'mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk')

    Сказал А - говори Б.
    Откудова mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk?

    А ты молодчага, я бы даже не увидел этого о_0
     
  8. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    ну я же не в голове посчитал :)
    Смотри, у тебя в базе написано "173e5028d064bff633bda48601d2ec7c:mkG0FBVxAFiqGlhns htFt7yYmuZYvUDk"
    Видишь там двоеточие есть?
    Так вот, после двоеточия mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk - это и есть соль, она генируется рэндомно, т.е. можешь в принцепи при создании пароля писать там abrakadabra (но это не безопасно).
    А то что до двоеточия - это md5('1111111'.'mkG0FBVxAFiqGlhnshtFt7yYmuZYvUDk'), т.е. md5(пароль, соль)
     
  9. Sammerset

    Sammerset Постоялец

    Регистр.:
    14 сен 2008
    Сообщения:
    136
    Симпатии:
    10
    Конечно же!
    Я уже сгенерил пароль, надо ещё и соль прицепить.
    Соль генерится такой функцией

    PHP:
    function getSalt($encryption 'md5-hex'$seed ''$plaintext '')
        {
            
    // Encrypt the password.
            
    switch ($encryption)
            {
                case 
    'crypt' :
                case 
    'crypt-des' :
                    if (
    $seed) {
                        return 
    substr(preg_replace('|^{crypt}|i'''$seed), 02);
                    } else {
                        return 
    substr(md5(mt_rand()), 02);
                    }
                    break;

                case 
    'crypt-md5' :
                    if (
    $seed) {
                        return 
    substr(preg_replace('|^{crypt}|i'''$seed), 012);
                    } else {
                        return 
    '$1$'.substr(md5(mt_rand()), 08).'$';
                    }
                    break;

                case 
    'crypt-blowfish' :
                    if (
    $seed) {
                        return 
    substr(preg_replace('|^{crypt}|i'''$seed), 016);
                    } else {
                        return 
    '$2$'.substr(md5(mt_rand()), 012).'$';
                    }
                    break;

                case 
    'ssha' :
                    if (
    $seed) {
                        return 
    substr(preg_replace('|^{SSHA}|'''$seed), -20);
                    } else {
                        return 
    mhash_keygen_s2k(MHASH_SHA1$plaintextsubstr(pack('h*'md5(mt_rand())), 08), 4);
                    }
                    break;

                case 
    'smd5' :
                    if (
    $seed) {
                        return 
    substr(preg_replace('|^{SMD5}|'''$seed), -16);
                    } else {
                        return 
    mhash_keygen_s2k(MHASH_MD5$plaintextsubstr(pack('h*'md5(mt_rand())), 08), 4);
                    }
                    break;

                case 
    'aprmd5' :
                    
    /* 64 characters that are valid for APRMD5 passwords. */
                    
    $APRMD5 './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

                    if (
    $seed) {
                        return 
    substr(preg_replace('/^\$apr1\$(.{8}).*/''\\1'$seed), 08);
                    } else {
                        
    $salt '';
                        for (
    $i 0$i 8$i ++) {
                            
    $salt .= $APRMD5 {
                                
    rand(063)
                                };
                        }
                        return 
    $salt;
                    }
                    break;

                default :
                    
    $salt '';
                    if (
    $seed) {
                        
    $salt $seed;
                    }
                    return 
    $salt;
                    break;
            }
        }
    Это ты про неё говорил?
     
  10. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    При дефолтном "md5-hex", который и у тебя юзается, соль - это просто рэндомная строка - любая!
     
Статус темы:
Закрыта.