2016-09-28 4 views
0

Что бы SQL заявление для проверки пароля, если таблица MySql, которая выглядит следующим образом:проверки пароля с солью и sha512whirlpool в MySQL

user_id password  salt 
------- --------  ---- 
1   23ed2... m9f3m... 

Я пробовал:

select * from password_table 
where user_id = 1 
and password = shal(`salt` + 'password') 
order by id desc 
limit 1 

, который не сделал вернуть что-нибудь. Алгоритм представляет собой вихревую ванну sha512.

В PHP это выглядит следующим образом:

hash('sha512', hash('whirlpool', $password));

Вполне возможно, что это не может быть сделано в операторе SQL.

+3

Вы не должны использовать простую хэш-функцию для защиты паролей пользователя. Вам нужно использовать сильную схему хэширования, такую ​​как PBKDF2, bcrypt, scrypt и Argon2. Обязательно используйте высокий коэффициент затрат/итераций. Обычно выбирается стоимость, так что одна итерация занимает не менее 100 мс. Подробнее: [Как безопасно использовать хэш-пароли?] (Http://security.stackexchange.com/q/211/45523) –

ответ

1

Вы не можете безопасно хэшировать и проверять пароли с помощью SQL-Statement, так как соленые хеши не могут быть найдены и потому, что большинство баз данных не предлагают соответствующие хэш-функции.

Вместо этого используйте хэш-функцию, такую ​​как BCrypt, SCrypt или PBKDF2, с вашего языка разработки. Для проверки сначала найдите хэш только по имени пользователя/id, а затем снова проверьте найденный хэш с языком разработки.

Смежные вопросы