Joomla 3.2.1 шифрование паролей

когда пользователь регистрируется на сайте, и я смотрю в базе данных joomla_users в таблице паролей, там хранятся пароли в следующих форматах:

  • $P$Do8QrURFT1r0NlWf0X / grdF/aMqwqK/

  • $P$DH38Lch9z508gJiop3A6u0whTity390

  • ........

но не в форме, как описано в документации (MD5 +":" + Соль):

  • 1802ebc64051d5b4f4d1b408babb5020: 0PHJDbnsyX05YpKbAuLYnw2VCzFMW2VK

Мне нужно прояснить это для меня, потому что я использую внешний скрипт, который проверяет учетные данные пользователя, чтобы проверить соответствие пароля.

в моем PHP-скрипте у меня есть код, который отделяет соль от пароля из базы данных:

$parts   = explode( ':', $password_database );
$crypt   = $parts[0];
$salt   = $parts[1];

но я не могу сделать это, если нет dobule узел (:)

3 ответов


попробуйте это,

следующий фрагмент кода создает стандартный пароль Joomla (более старая версия 1.5,1.7 etc).

 jimport('joomla.user.helper');
 $salt = JUserHelper::genRandomPassword(32);
 $crypt = JUserHelper::getCryptedPassword($password_choose, $salt);
 $password = $crypt.':'.$salt;

Joomla 3.2+ введен алгоритм пароля PHP bcrypt но это потребовало минимального PHP 5.3+ если вы планируете использовать bcrypt убедитесь, что ваш сервер PHP версия способна для этого,подробнее здесь.

другая версия Joomla с использованием следующие методы (Joomla 3.x)

 jimport('joomla.user.helper');
 $yourpass = JUserHelper::hashPassword($password_choose);

старый алгоритм также отлично работает в последней версии, только разница в том, что более старая версия создает пароль из 65 символов, а новая создает строку из 34 символов. всегда идите с обновленной версией

также, если вы используете внешний скрипт, должен включать Joomla framework, как показано ниже. Это должно быть в верхней части вашего внешнего файла php

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

также вы упоминалось, что вам нужно проверить учетные данные пользователей, а затем не нужно проверять формат пароля, и все это просто использовать ниже кодов после загрузки фреймворка.

   $credentials['username'] = $data['username']; //user entered name
   $credentials['password'] = $data['password']; //users entered password
   $app = JFactory::getApplication();
   $error = $app->login($credentials, $options);
   if (!JError::isError($error)) {
    // login success
    }
  else{
    //Failed attempt
   }

надеюсь, что это помогает..


класс пользователя по умолчанию Joomla больше не использует соленый MD5 для хэширования пароля. Функция bind из JUser класс теперь называет JUserHelper::hashPassword($array['password']) зашифровать паролем.

эта функция в настоящее время это:

public static function hashPassword($password)
    {
            // Use PHPass's portable hashes with a cost of 10.
            $phpass = new PasswordHash(10, true);

            return $phpass->HashPassword($password);
    }

и это означает, что теперь он полагается на PHPass, о котором вы можете прочитать здесь:http://www.openwall.com/phpass/. Основываясь на чтении только вступления этого сайта, я предполагаю, что шифрование теперь bcrypt вместо MD5, но Joomla возможно, переопределено шифрование по умолчанию.


С ответом Дэвида Фрича я получаю зашифрованный пароль, как это делает Joomla:

<?php
    define( '_JEXEC', 1 );
    define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
    define( 'DS', DIRECTORY_SEPARATOR );

    require_once( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once( JPATH_BASE .DS.'includes'.DS.'framework.php' );

    $mainframe =& JFactory::getApplication('site');
    $mainframe->initialise();

    jimport('joomla.user.helper');
    $password = "test";     
    echo "<strong>Password: </strong>" . JUserHelper::hashPassword($password);
?>

обратите внимание, что вы должны сохранить файл в корневом каталоге joomla или изменить JPATH_BASE.