Intereting Posts
Преобразование всех типов смарт-котировок с помощью PHP get_permalink для json_decode не работает как защитить паролем загружаемые pdf-файлы на веб-сайте Crypto-Js различный вывод из mcrypt. После считывания данных для шифрования Тетрирование массива PHP Использовать имя переменной в foreach после установки значения Как проверить, существует ли веб-страница. jQuery и / или PHP Ошибка цифровых товаров PayPal при входе в систему получить массив всех атрибутов продуктов в magento Подключение к LocalHost / 10.0.2.2 из Android-эмулятора отключено Как фиксировать детали очереди заданий после завершения в Laravel 5.1? Как преобразовать PDF-документ в изображение предварительного просмотра в PHP? Предупреждение: mysql_result (): предоставленный аргумент не является допустимым ресурсом результата MySQL в (…) в строке 4 PHP: openssl_random_pseudo_bytes () и Crypto Security vs Extreme Randomness mysqli или умереть, нужно ли умирать?

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

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

Но не в форме, описанной в документации (MD5 + ":" + SALT):

  • 1802ebc64051d5b4f4d1b408babb5020: 0PHJDbnsyX05YpKbAuLYnw2VCzFMW2VK

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

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

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

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

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

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

  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, как показано ниже. Это должно быть на самом верху вашего внешнего 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 для хеширования пароля. Функция связывания класса 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.