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.

32
demandé sur Red 2012-05-03 12:57:46

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.

59
répondu klennepette 2012-05-03 13:48:06

à 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

22
répondu Er. Anurag Jain 2012-05-03 09:20:46

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();
5
répondu Jobin Jose 2012-05-03 09:34:52

je ne pouvais pas utiliser preg_split mais explode fonctionne bien.

$hashparts = explode (':' , $dbpassword);
3
répondu jayadevkv 2013-06-10 10:09:09

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;


    }
}
2
répondu Sam Adamsh 2014-12-21 06:26:14

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'shashPassword 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 :)

2
répondu Joomler 2016-03-02 09:47:46

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.

0
répondu jackJoe 2012-05-03 09:03:34

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.

0
répondu itoctopus 2014-07-25 22:43:24
<?php
$r = bin2hex(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM));
$p = 'the_password';

$s = $p . $r;
$m = md5($s);

$out = $m . ':' . $r;
echo $out;

Len 16 parce que bin2hex double la taille des caractères, puisqu'un octet devient 2 octets

0
répondu 2016-06-30 19:10:46