Page 1 sur 1

Modifier méthode d'encryption de mot de passe d'un programme

Posté : 09 juil. 2009, 19:02
par stefane321
Bonjour,

J'ai un gros défie et j'ai besoin de votre aide de programmeur expérimenté pour le faire.

J'ai un ptit contrat a faire qui consiste à prendre les données des compte utilisateur d'un site d'annonce classée et de les importer dans un autre script d'annonces classée parce que le propriétaire du si a décider d'utiliser un autre script car son script initial est encodé donc le code est non modifiable.

Là je dois importer ses données dans Noah classified add

Le problème est que les mot de passe de son site initial sont encrypté avec md5() tandis que Noah utilise une méthode nébuleuse à mon niveau de connaissance.

Donc, je veux modifier Noah pour que il soit en md5()

J,ai bien étudier le code et tout se qui est en lien au mot de passe utilise ne fonction que je ne comprend pas.

Je vous colle la fonction et svp expliquez moi se que vous en comprenez:
function getPassword( $s )
{

    $s=addcslashes($s,"'\\");
    $version = mysql_get_server_info();
    $mainVersion = intval($version[0]);
    $subVersion = intval($version[2]);
    $pwdQuery = ($mainVersion==4 && $subVersion==0) || $mainVersion<4 ? "password" : "old_password";
    $data = mysql_query("select $pwdQuery('$s')");
    $row = mysql_fetch_row($data);

    return $row[0];
}
Voici une fonction où cette précédente fonction est utilisé:
function validLogin()
{
    $user = new User;
    $user->setUniqueValue($this->getUniqueValue());
    if( load($user, array($this->getUniqueAttr())) || $user->id==$user->name ) Roll::setFormInvalid();
    else
    {
        if( getPassword($this->password)!=$user->password && $user->newPassword )
        {
            if( getPassword($this->password)==$user->newPassword )
            {
                executeQuery(array("UPDATE @user SET password='$user->newPassword', newPassword='' WHERE id=#id#", $user->id));
            }
            else Roll::setFormInvalid();
        }        
        elseif( getPassword($this->password)!=$user->password ) Roll::setFormInvalid();
        $this->id = $user->id;
        $this->lastClickTime = $user->lastClickTime;
    }
    if( Roll::isFormInvalid() ) Roll::setInfoText("loginInvalid");    
    return !Roll::isFormInvalid();
}
Merci, j'espère que vous pourrez m'aider!

Re: Modifier méthode d'encryption de mot de passe d'un progr

Posté : 09 juil. 2009, 19:16
par Sékiltoyai
function getPassword( $s )
{

    $s=addcslashes($s,"'\");
    $version = mysql_get_server_info();
    $mainVersion = intval($version[0]);
    $subVersion = intval($version[2]);
    $pwdQuery = ($mainVersion==4 && $subVersion==0) || $mainVersion<4 ? "password" : "old_password";
    $data = mysql_query("select $pwdQuery('$s')");
    $row = mysql_fetch_row($data);

    return $row[0];
}
Bah on va traduire ensemble. :)
Alors, on va dire que cette fonction encode un mot de passe fourni en paramètre, bon c'est tout à fait contestable de faire une requête juste pour cela mais passons. :)
On a ça :

Code : Tout sélectionner

select $pwdQuery('$s')
Donc on fait un select pour récupérer un résultat. Le select exécute la fonction $pwdQuery sur l'argument $s.
Bon, $s, c'est simple, c'est l'argument de la fonction, donc c'est le mot de passe encodé.
Maintenant $pwdQuery. Hé bien plus haut, c'est indiqué ça :
$pwdQuery = ($mainVersion==4 && $subVersion==0) || $mainVersion<4 ? "password" : "old_password";
A vrai dire je ne connais pas la version mais bon, c'est pas vraiment utile pour comprendre. Tu vois que dans un cas compliqué, $pwdQuery vaudra "password", et dans un autre cas compliqué, $pwdQuery vaudra "old_password".
Donc, pour récapépéter, la fonction qui sera exécutée, ce sera password ou old_password. Le mot de passe sera donc encodé en format mysql password ou en format mysql old_password.

Donc en définitive, si tu as compris le raisonnement, tu constateras par toi même qu'il suffit juste de demander un mot de passe MD5 plutôt de PASSWORD ou OLD_PASSWORD. Et tu remarqueras aussi qu'il n'y a pas besoin de mysql pour générer un mot de passe au format MD5.
Bref, tu auras compris, après la modification, ta fonction getPassword fera une ligne, je te laisse la trouver :)

Posté : 09 juil. 2009, 23:52
par stefane321
Suite à ton explication j'ai fait ceci:
function getPassword( $s )
{
	return md5($s);
}
Et sa semble marcher!

Est-ce que j'ai bien fait ça ou si cest mieux de l'écrire autrement?

Merci!

Posté : 10 juil. 2009, 02:34
par Sékiltoyai
Suite à ton explication j'ai fait ceci:
function getPassword( $s )
{
	return md5($s);
}
Et sa semble marcher!

Est-ce que j'ai bien fait ça ou si cest mieux de l'écrire autrement?

Merci!
Non, c'est exactement ça qu'il fallait mettre :)