Joomla 3.2.1 szyfrowanie haseł

Kiedy użytkownik rejestruje się na stronie, a ja zaglądam do bazy danych joomla_users w tabeli haseł, są hasła zapisane w następujących formatach:

  • $P$Do8qrurft1r0nlwf0x / grdF / aMqwqK /

  • $P$DH38Lch9z508gJiop3A6u0whTity390

  • ........

Ale nie w formie opisanej w dokumentacji (MD5+": "+ SALT):

  • 1802ebc64051d5b4f4d1b408babb5020: 0phjdbnsyx05ypkbaulynw2vczfmw2vk

I need to wyjaśnij mi to, ponieważ używam zewnętrznego skryptu, który sprawdza poświadczenia użytkownika, aby sprawdzić zgodność hasła.

W moim skrypcie PHP Mam kod oddzielający sól od hasła z bazy danych:

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

Ale nie mogę tego zrobić, jeśli nie ma węzła dobule (:)

Author: manlio, 2014-01-23

3 answers

Spróbuj tego,

Poniższy fragment kodu tworzy standardowe hasło Joomla (starsza wersja 1.5,1.7 itd.) .

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

Joomla 3.2 + wprowadziła algorytm haseł PHP bcrypt ale wymagał minimum PHP 5.3+ jeśli planujesz używać bcrypt upewnij się, że Twoja serwerowa wersja PHP jest do tego zdolna, przeczytaj więcej tutaj .

Druga wersja Joomla przy użyciu następujących metod (Joomla 3.x )

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

starszy algorytm działa również dobrze w najnowszej wersji, tylko różnica jest starsza wersja tworzy hasło 65 znaków, a nowa tworzy ciąg znaków 34. zawsze korzystaj z zaktualizowanej wersji

Również jeśli używasz zewnętrznego skryptu powinien zawierać Joomla framework jak poniżej. To powinno być na samym szczycie twojego zewnętrznego pliku 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();

Również wspomniałeś, że musisz sprawdzić poświadczenia użytkowników, a następnie nie trzeba sprawdzać hasła format i wszystko po prostu użyj poniższych kodów po załadowaniu frameworka.

   $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
   }
Mam nadzieję, że to pomoże..
 14
Author: Jobin Jose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-11 03:35:06

Domyślna klasa użytkownika Joomla nie używa już solonego MD5 do hashowania hasła. Funkcja bind klasy JUser wywołuje teraz JUserHelper::hashPassword($array['password']), aby zaszyfrować hasło.

Ta funkcja jest obecnie następująca:

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

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

A to oznacza, że teraz opiera się na PHPass, o którym możesz przeczytać więcej tutaj: http://www.openwall.com/phpass / . bazując na czytaniu tylko intro tej strony, zgaduję, że szyfrowanie jest teraz bcrypt zamiast MD5, ale Joomla może przesłonić domyślną szyfrowanie.

 10
Author: David Fritsch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-23 17:43:20

Z David Fritsch odpowiedzi dostaję zrobić zaszyfrowane hasło, jak Joomla robi:

<?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);
?>

Zauważ, że musisz zapisać plik w katalogu głównym joomla, lub zmienić JPATH_BASE.

 5
Author: Mikel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-22 11:40:40