Мне нужно помочь в создании запроса для соли и md5 пароля, а затем подтвердить вход в MySQL Table - PullRequest
1 голос
/ 12 августа 2009

Я создал представление таблицы в базе данных MySQL, чтобы другое приложение могло использовать нашу существующую (централизованную) таблицу клиентов.

Наши пароли хранятся как

md5 (пароль + соль) + ":" + соль

Обычно я декодирую это через язык программирования данного приложения, к которому мы подключаемся, но ...

На этот раз это стороннее приложение, и у меня есть только SQL и один запрос для авторизации пользователя.

Можете ли вы помочь мне создать действительный запрос SQL для аутентификации?

Логика проста:

  • Получить соль для данного пользователя (все после двоеточия)
  • объединить пароль и соль
  • MD5 пароль и соль
  • затем сравните полученный хэш md5

SQL-запрос по умолчанию для этого приложения

выбрать * из пользователей где userName =? а userPass =?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 августа 2009

Я попробовал это, и это работает:

SELECT * FROM users
WHERE userPass = CONCAT( 
  MD5(CONCAT('xyzzy', (@salt := SUBSTRING_INDEX(userPass, ':', -1)))), 
  ':', @salt)
AND userName = 'bkarwin';

Я знаю, что у вас, вероятно, нет свободы что-либо менять, но FWIW, MD5() не считается достаточно надежным шифрованием для паролей. Рекомендуется использовать SHA-256, который доступен через функцию SHA2() в MySQL 6.0.5.

0 голосов
/ 12 августа 2009
select * from users where userName='MyUser' and userPass=concat(md5('MyPass'), ':', salt)
where salt=(
  select substring(userPass FROM (instr(userPass, ':')+1)) from users
    where userName='MyUser'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...