Joomla mot de passe cryptage
j'ai besoin de l'accès de l'utilisateur joomla table jos_users
pour la vérification de connexion à partir du script php externe [codeignitor].
joomla stockant mot de passe comme ceci
4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT
on dirait que ce N'est pas le MD5 normal ,donc je ne peux pas utiliser md5(password)
.
quel est le moyen possible de créer le mot de passe ?
je vous Remercie.
9 réponses
les mots de passe Joomla sont hachés MD5, mais les mots de passe sont salés avant d'être hachés.
Ils sont stockés dans la base de données {hash}:{salt}
ce sel est une chaîne aléatoire de 32 caractères.
alors pour créer un nouveau hachage de mot de passe vous feriez md5($password.$salt)
EDIT
Ok, donc, pour vérifier un mot de passe qu'un utilisateur myguy
entre le mot de passe mypassword
, vous permettrait de récupérer la ligne de la base de données nom d'utilisateur myguy
.
dans cette rangée vous trouverez un mot de passe dire 4e9e4bcc5752d6f939aedb42408fd3aa:0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT
.
Diviser le hachage de mot de passe et le sel:
$hashparts = preg_split (':' , $dbpassword);
echo $hashparts[0]; //this is the hash 4e9e4bcc5752d6f939aedb42408fd3aa
echo $hashparts[1]; //this is the salt 0vURRbyY8Ea0tlvnTFn7xcKpjTFyn0YT
calculez maintenant le hachage en utilisant ce sel et le mot de passe myguy
entrée
$userhash = md5($userpassword.$hashparts[1]); // This would be 'mypassword' and the salt used in the original hash
Maintenant si ce n' $userhash
et $hashparts[0]
sont identiques, l'utilisateur a entré le bon mot de passe.
à Partir de joomla Forum, c'est ce qu'il se passe derrière:
A. Generate a password
B. Generate a string with 32 random characters
C. Concatenate Password (Step A) and RandomString (Step B)
D. Take md5(Result of Step C)
E. store Step D Result : Step B Result
Exemple:
Generate a password - Let 'testing'
Generate a string of 32 random characters - 'aNs1L5PajsIscupUskaNdPenustelsPe'
Concatenate Password and random string - testingaNs1L5PajsIscupUskaNdPenustelsPe
md5(Step C Result) - 5cf56p85sf15lpyf30c3fd19819p58ly
store step d:step B - 5cf56p85sf15lpyf30c3fd19819p58ly:aNs1L5PajsIscupUskaNdPenustelsPe
vous pouvez trouver du code dans Joomla comme
$salt = JUserHelper::genRandomPassword(32);
$crypt = JUserHelper::getCryptedPassword("testing", $salt);
$password = $crypt . ':' . $salt;
Ou Nous pouvons Dire
password DB field = md5(password + salt) + ":" + salt
où sel est aléatoire 32 chaîne de caractères.
merci
dans joomla standard vous pouvez créer un mot de passe en utilisant la manière suivante
jimport('joomla.user.helper');
$salt = JUserHelper::genRandomPassword(32);
$crypt = JUserHelper::getCryptedPassword($password_choose, $salt);
$password = $crypt.':'.$salt;
vous mentionnez que vous accédez à partir d'un fichier externe(ou de programmes) alors si vous avez l'installation de joomla de l'autre côté, vous pouvez y accéder de l'extérieur de la structure de joomla.
utiliser le travail de cadre par défaut de joomla comme ceci
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();
je ne pouvais pas utiliser preg_split
mais explode
fonctionne bien.
$hashparts = explode (':' , $dbpassword);
dans le joomla fichier source libraries/joomla/crypt/mot de passe/simple.php il y a plusieurs façons de les stocker, et certaines n'ont pas de caractère':'.
switch ($type)
{
case 'a$':
case JCryptPassword::BLOWFISH:
if (JCrypt::hasStrongPasswordSupport())
{
$type = 'y$';
}
else
{
$type = 'a$';
}
$salt = $type . str_pad($this->cost, 2, '0', STR_PAD_LEFT) . '$' . $this->getSalt(22);
return crypt($password, $salt);
case JCryptPassword::MD5:
$salt = $this->getSalt(12);
$salt = '$' . $salt;
return crypt($password, $salt);
case JCryptPassword::JOOMLA:
$salt = $this->getSalt(32);
return md5($password . $salt) . ':' . $salt;
}
}
Joomla! utilise PhPass.
root/libraries/phpass/PasswordHash.php
jetez un oeil ici. vous verrez ici comment le mot de passe est la génération.
$ 2y est le préfixe par défaut (et préféré) de bcrypt hachages.
Comme pour le code, vous voudrez regarder à l'intérieur JUserHelper's
hashPassword
et verifyPassword
méthodes pour voir comment Joomla travaille avec les choses en ce moment.
Quelques Références -
https://github.com/joomla/joomla-cms/blob/3.4.1/libraries/joomla/user/helper.php#L296-L387
https://docs.joomla.org/API15:JUserHelper/getCryptedPassword
https://docs.joomla.org/API15:JUserHelper/getSalt
Vérifier les liens, j'espère qu'il vous sera utile :)
Joomla " comprend "les mots de passe avec" normal " md5.
ce que j'ai fait dans le passé (pour tester la connexion d'un utilisateur), était de sauvegarder le mot de passe original, de crypter un nouveau dans md5, de le remplacer dans la base de données, de le tester avec le navigateur (et il fonctionne) et quand j'ai été fait, coller le mot de passe original dans la base de données.
si vous utilisez md5 ($password); ça va marcher, essayez-le. Joomla a un mécanisme et il peut fonctionner avec plusieurs types de mots de passe (y compris, à partir de la fin, les mots de passe forts). Tu n'as pas à t'inquiéter pour la partie après le colon. Suffit d'utiliser md5($password) et il va certainement travailler.
au fait, ça marchera aussi sur Joomla 3.x.