MySQL MD5 SELECT

Этот следующий запрос возвращает null.

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

Следующий запрос вернул 'd2b4312db21705dafd96df14f8525fef', но почему?

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

Этот код вернул '422ad0c19a38ea88f4db5e1fecaaa920'.

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

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

Выполните авторизацию пользователя. Как создать запрос к базе данных, чтобы в первом случае SALT и SALT имели это, я сделал некоторую функцию MD5?

Ответы

Ответ 1

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

Вам нужно выполнить concat() строки, а затем выполнить md5().

Таким образом он корректно возвращает то же значение, что и ваш PHP script:

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

Ответ 2

Конкатенация строк в MySQL требует использования CONCAT() `. Это;

md5( '123123' + 'Vwm' )

фактически добавляет число к строке:

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

Таким образом, ваш запрос не совпадает с PHP-стороной, поскольку вы не хотите использовать одну и ту же строку.

Ответ 3

  • соль должна находиться в script
  • соленый пароль в вашей базе данных
  • ваш script пароль для соления и сравнение с соленой версией в db
  • если они считают ОК