Je rencontre des problèmes avec mon système de connexion. Si je définis mon mot de passe utilisateur sur 'TestPassword1234', 'TestPassword' sera accepté comme mot de passe. Après avoir testé un peu plus, j'ai découvert que le code suivant entraînerait la création de deux hachages identiques même si la chaîne passée est pas la même.PHP Le hachage du mot de passe retourne la même valeur
Il est important de savoir que tous les sels utilisés sont générés par cette fonction. Un est généré par test et le même est utilisé pour hacher les deux chaînes (comme ce serait le cas lors de la connexion d'un utilisateur).
function GUID() {
if (function_exists('com_create_guid') === true) { return trim(com_create_guid(), '{}'); }
return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}
La fonction ci-dessus provient d'une question de débordement de pile, je ne sais pas lequel.
Ce n'est pas le cas si le mot de passe est fondamentalement modifié, voir ci-dessous pour les tests.
L'extrait suivant présente deux mots de passe différents résultant du même hachage.
$guid = GUID();
echo(crypt("TestPassword1234", $guid)); //455nKS7NToPuY
echo("<br />");
echo(crypt("TestPassword", $guid)); //455nKS7NToPuY (the same!)
Cet extrait montre deux mots de passe différents qui ne résultent pas dans le même résultat, même si elles suivent un schéma similaire à l'extrait ci-dessus
$guid = GUID();
echo(crypt("Test1234", $guid)); //BBWxwWzIXAOQI
echo("<br />");
echo(crypt("Test", $guid)); //BBhe4TjDcO5XA (different...)
Je suppose que le problème provient de l'utilisation du Fonction GUID. Peut-être est-il défectueux ou prend uniquement en charge un mot de passe d'une longueur maximale de x
. Je n'ai aucune idée et ne peux pas traquer la question SO je l'ai trouvé.
L'aide est très appréciée.
Utilisez 'password_hash' à la place.Vous ne devriez pas générer de sel vous-même car 'password_hash' génère automatiquement un sel sûr pour vous. –
Vous avez trouvé cette fonction ici - http://php.net/manual/en/function.com-create-guid.php#99425 – Drakes
Je ne peux pas utiliser 'password_hash', mon hébergeur utilise une version de PHP qui n » t avoir cette fonction. – Harry