web-dev-qa-db-fra.com

MySQL MD5 SELECT

Cette requête suivante a renvoyé null.

SELECT `email`, `password`, `salt` FROM `users` WHERE `password` = md5(`salt`+md5('123123'+`salt`)+'123123') AND `email` = '[email protected]'

La requête suivante a renvoyé 'd2b4312db21705dafd96df14f8525fef', mais pourquoi?

SELECT md5( 'Vwm' + md5( '123123' + 'Vwm' ) + '123123' )  

Ce code a renvoyé '422ad0c19a38ea88f4db5e1fecaaa920'.

$salt = 'Vwm';
$password = '123123';

echo md5($salt . md5($password . $salt) . $password);

Faites l'autorisation de l'utilisateur. Comment puis-je créer une requête dans la base de données pour que le premier a pris SALT et SALT ai-je fait une fonction MD5?

16
Isis
SELECT md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm' )), '123123' )) ;

Vous devez concat () les chaînes puis exécuter md5 () sur elles.

De cette façon, il renvoie correctement la même valeur que votre script PHP:

+--------------------------------------------------------------+
| md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm' )), '123123' )) |
+--------------------------------------------------------------+
| 422ad0c19a38ea88f4db5e1fecaaa920                             |
+--------------------------------------------------------------+
33
Ass3mbler

La concaténation de chaînes dans MySQL nécessite l'utilisation de CONCAT () `. Cette;

md5( '123123' + 'Vwm' )

ajoute en fait un nombre à une chaîne:

mysql> select '12123' + 'Vwm';
+-----------------+
| '12123' + 'Vwm' |
+-----------------+
|           12123 |
+-----------------+

Votre requête n'est donc pas la même que celle du côté PHP, car vous ne hachez pas la même chaîne.

11
Marc B
  • le sel devrait être dans votre script
  • mot de passe salé dans votre base de données
  • votre script salue le mot de passe et compare avec la version salée en db
  • si même considérer OK
2
bensiu