2011-01-30 10 views
14

Esta consulta siguiente devolvió nulo.MySQL MD5 SELECCIONAR

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

La siguiente consulta devuelve 'd2b4312db21705dafd96df14f8525fef', pero ¿por qué?

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

Este código devuelto '422ad0c19a38ea88f4db5e1fecaaa920'.

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

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

Haz la autorización del usuario. ¿Cómo creo una consulta en la base de datos para que la primera tomara SALT y SALT y obtuve una función MD5?

+2

Sólo un pequeño aviso, incluso con (doble) salazón, sería mejor usar sha1 ya que es más seguro. ¡Usar sha1 hará que tu script sea más seguro para el futuro! – gnur

Respuesta

31
SELECT md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm')), '123123')) ; 

Necesita concat() las cadenas y luego ejecutar md5() en ellas.

De esta manera se vuelve correctamente el mismo valor que su script PHP:

+--------------------------------------------------------------+ 
| md5(CONCAT('Vwm', md5(CONCAT('123123', 'Vwm')), '123123')) | 
+--------------------------------------------------------------+ 
| 422ad0c19a38ea88f4db5e1fecaaa920        | 
+--------------------------------------------------------------+ 
2
  • sal debe estar en su script
  • contraseña salada en su base de datos
  • su guión está salando contraseña y comparar con la versión salada en dB
  • si misma considere OK
+0

Necesito que cada usuario tenga su propia sal – Isis

11

La concatenación de cadenas en MySQL requiere el uso de CONCAT() `. Esta;

md5('123123' + 'Vwm') 

está añadiendo un número en una cadena:

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

Por lo que su consulta no es lo mismo que el lado de PHP, ya que no está hash de la misma cadena.