Récemment, un projet de refonte a nécessité que j’insère dans Joomla! des utilisateurs issus d’un ancien site. J’ai opté pour un script d’insertion en base de données afin de ne pas avoir à taper les utilisateurs 1 à 1 en back-office. J’ai alors vite été bloqué devant la solution de cryptage du mot de passe utilisée dans joomla! 1.6 et 1.5.
Après quelques recherches sur le net, j’ai trouvé une petite fonction qui permet de générer un mot de passe fonctionnel que l’on pourra insérer dans le champ `jos_users`.`password` d’un des utilisateurs du site.
Joomla! 1.6 et 1.5 encryptent par défaut les mots de passe en md5, avec une clé de cryptage ‘salt‘ générée aléatoirement pour chaque mot de passe. Dans la base de données tous les mots de passe sont donc sous la forme suivante:
95c833861f8c600e0992ca:EPGGRPN5upudFC6eokxS4OWx
qui correspond à :
md5($password.$salt).':'.$salt;
Lorsqu’un utilisateur s’authentifie, le mot de passe qu’il a saisi est concaténé avec $salt, puis crypté en md5 et enfin comparé à md5($password.$salt).
Voici le code complet qui permet de générer une clé de cryptage aléatoire et retourner le mot de passe haché pour Joomla!:
<?php
/*
* Fonction qui créée un clé aléatoire
* pour générer un mot de passe Joomla crypté
*
* @param $length
* @return $salt
*
*/
function genRandomPassword($length = 32)
{
$salt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$len = strlen($salt);
$makepass = '';
mt_srand(10000000 * (double) microtime());
for ($i = 0; $i < $length; $i ++) {
$makepass .= $salt[mt_rand(0, $len -1)];
}
return $makepass;
}
//Création de la clé de cryptage
$salt = genRandomPassword();
//Cryptage du password
$new_password = md5('mon password'.$salt).':'.$salt;
//exemple: 95c833861f8c600e0992ca:EPGGRPN5upudFC6eokxS4OWx
?>


