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 (:)
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..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.
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.
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