Je lisais ce tutoriel pour un système de connexion PHP simple .
En fin de compte, il recommande que vous crypter votre mot de passe en utilisant md5() .
Même si je sais qu'il s'agit d'un tutoriel pour débutants et que vous ne devriez pas mettre des relevés bancaires derrière ce système de connexion, cela m'a fait réfléchir au cryptage.
Je suis donc allé voir (l'une des questions les plus utiles de ce site pour les débutants) : Que doit savoir un développeur avant de créer un site web public ?
Il y est dit (sous la rubrique sécurité) que vous devriez :
CrypterHachez et salez les mots de passe plutôt plutôt que de les stocker en clair.
Il n'en dit pas beaucoup plus, pas de références.
Alors j'ai pris les devants et j'ai essayé moi-même :
$pass = "Trufa";
$enc = md5($pass);
echo $enc; #will echo 06cb51ce0a9893ec1d2dce07ba5ba710
Et c'est ce qui m'a fait penser que, même si je sais que md5() n'est peut-être pas le moyen le plus puissant de chiffrer, tout ce qui produit toujours le même résultat peut faire l'objet d'une ingénierie inverse.
Quel est donc l'intérêt de crypter quelque chose avec md5() ou toute autre méthode ?
Si un hacker arrive à un mot de passe crypté avec md5(), il n'aurait qu'à utiliser cette page ! .
Alors maintenant, les vraies questions :
- Comment fonctionne le cryptage des mots de passe ?
Je sais que je n'ai pas découvert une énorme vulnérabilité du web ici ! :) Je veux juste comprendre la logique derrière le cryptage des mots de passe.
Je suis sûr que je comprends mal quelque chose et j'apprécierais que vous m'aidiez à mettre de l'ordre dans mes idées et dans celles des autres (j'espère).
Comment devriez-vous appliquer le cryptage des mots de passe pour qu'il soit réellement utile ?
- Que pensez-vous de cette idée ?
Comme je l'ai dit, il se peut que je comprenne mal l'idée dans son ensemble, mais, cette méthode ajouterait-elle une quelconque sécurité à un environnement réel ?
$reenc = array(
"h38an",
"n28nu",
"fw08d"
);
$pass = "Trufa";
$enc = chunk_split(md5($pass),5,$reenc[mt_rand(0,count($reenc)-1)]);
echo $enc;
Comme vous le voyez, j'ai ajouté au hasard des chaînes de caractères arbitraires ( $reenc = array()
) à mon mot de passe md5() "pour le rendre unique". Ceci n'est bien sûr qu'un exemple stupide.
Je peux me tromper, mais à moins que vous n'introduisiez le cryptage vous-même, il sera toujours facilement réversible.
Ce qui précède serait mon idée de la "protection par mot de passe" et du mot de passe crypté. Si un pirate y parvient, il ne pourra pas le décrypter à moins d'avoir accès au fichier .php brut.
Je sais que cela n'a peut-être aucun sens, mais je n'arrive pas à comprendre pourquoi c'est une mauvaise idée !
J'espère avoir été suffisamment clair, mais cette question est très longue, veuillez demander toute clarification nécessaire !
Merci d'avance !