Renforcer une signature MD5
Posté : 07 août 2008, 22:55
Le tuto suivant en toute modestie et sans aucune prétention juste pour le plaisir de faire partager.
Je ne prétends pas avoir trouvé une solution miracle, c'est juste une solution parmi d'autre pour rendre la vie plus difficile à certaine andouille qui traîne sur le net
Tout le monde pense que MD5 est un algorithme efficace (et moi le premier) et c’est probablement vrai, mais le site http://gdataonline.com a entrepris de stocker les signatures MD5 d’un maximum de mot de passe et pour vous faire peur et surtout vous donner un exemple essayer avec un mot de passe fréquent :
Signature => 21232f297a57a5a743894a0e4a801fc3 et faut moins d’une demi seconde au site pour trouver la correspondance ici admin. (5 lettres).
Puis là il y a quelqu’un qui le dit (oui mais un mot de passe de 5 lettres tu déconne) alors je répondrai ceci
Signature => 372eeffaba2b5b61fb02513ecb84f1ff et faut moins d’une demi seconde au site pour trouver la correspondance ici administrateur. (14 lettres).
Maintenant libre à vous d’imposer des mots de passe 20 caractères mais alors vous risquez d’avoir pas mal de récriminations de la part de vos utilisateurs.
Alors une méthode pour ne pas imposer des mots de passe trop long est de les allonger automatiquement vous-même.
Exemple :
Cette méthode rajoute un préfixe un suffixe et une chaîne de caractère à la signature.
Signature => 2923d15494c5c5da66f41592ff784aba
Le site ne trouve pas l’équivalent de cette signature.
Par contre le même mot de passe sans suffixe et préfixe la signature est trouver en moins d’une demi seconde.
Pour vérifier le mot de passe il suffit de faire comme ceci.
Je ne prétends pas avoir trouvé une solution miracle, c'est juste une solution parmi d'autre pour rendre la vie plus difficile à certaine andouille qui traîne sur le net
Tout le monde pense que MD5 est un algorithme efficace (et moi le premier) et c’est probablement vrai, mais le site http://gdataonline.com a entrepris de stocker les signatures MD5 d’un maximum de mot de passe et pour vous faire peur et surtout vous donner un exemple essayer avec un mot de passe fréquent :
Signature => 21232f297a57a5a743894a0e4a801fc3 et faut moins d’une demi seconde au site pour trouver la correspondance ici admin. (5 lettres).
Puis là il y a quelqu’un qui le dit (oui mais un mot de passe de 5 lettres tu déconne) alors je répondrai ceci
Signature => 372eeffaba2b5b61fb02513ecb84f1ff et faut moins d’une demi seconde au site pour trouver la correspondance ici administrateur. (14 lettres).
Maintenant libre à vous d’imposer des mots de passe 20 caractères mais alors vous risquez d’avoir pas mal de récriminations de la part de vos utilisateurs.
Alors une méthode pour ne pas imposer des mots de passe trop long est de les allonger automatiquement vous-même.
Exemple :
<?php
//Définition de données de connexion//
$host ="";
$login ="";
$pass ="";
$base ="";
#connexion à MySQL
$link = mysql_connect($host, $login, $pass)
or die ("Erreur MySQL :<br />" .$link. "<br />" .
"Impossible d'établir une connexion avec MySQL");
mysql_select_db ($base)
or die ("Erreur MySQL :<br />" .$link. "<br />" .
"Impossible d\'établir une connexion avec la base ".$base."");
$signature = 'admin';
$login = 'dunbar';
function allonge_signature($password) {
$password = 'prefixe' .$password. 'suffixe';
return strrev($password);
}
$signature = md5(allonge_signature($password));
$requete = 'INSERT
INTO
user
SET
id = "",
login = "'.mysql_escape_string($login).'",
password = "'.mysql_escape_string($signature).'"';
if(false ===($resultat = mysql_query($requete))) {
die("Erreur MySQL :<br />" .$requete. "<br />" . "Impossible de sauvegarder la/les modification/s");
}
?>
Cette méthode rajoute un préfixe un suffixe et une chaîne de caractère à la signature.
Signature => 2923d15494c5c5da66f41592ff784aba
Le site ne trouve pas l’équivalent de cette signature.
Par contre le même mot de passe sans suffixe et préfixe la signature est trouver en moins d’une demi seconde.
Pour vérifier le mot de passe il suffit de faire comme ceci.
<?php
//Définition de données de connexion//
$host ="";
$login ="";
$pass ="";
$base ="";
#connexion à MySQL
$link = mysql_connect($host, $login, $pass)
or die ("Erreur MySQL :<br />" .$link. "<br />" .
"Impossible d'établir une connexion avec MySQL");
mysql_select_db ($base)
or die ("Erreur MySQL :<br />" .$link. "<br />" .
"Impossible d\'établir une connexion avec la base ".$base."");
$_POST['password'] = 'admin';
$password = $_POST['password'];
$login = 'dunbar';
function allonge_signature($password) {
$password = 'prefixe' .$password. 'suffixe';
return strrev($password);
}
$signature = md5(allonge_signature($password));
$sql ='SELECT
COUNT(*)
FROM
user
WHERE
login = "'.mysql_escape_string($login).'"
AND
password = "'.mysql_escape_string($signature).'"
';
if(false ===($resultat = mysql_query($sql))) {
die("Erreur MySQL :<br />" .$sql. "<br />" . "Impossible de vérifier les données");
}
?>