hash () функция в версии 8.0 mysql - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь сохранить пароли в моей пользовательской таблице.Конечно, я хочу солить и хэшировать их раньше.

Но в mysql больше нет метода hash ().Как я могу сделать это в версии 8.0?Есть ли альтернативы?

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы должны хешировать пароли в своем приложении, прежде чем отправлять их в SQL.

Почему я так говорю? Ведь вы могли бы сделать это:

INSERT INTO Accounts (user, salt, password) 
VALUES ('myuser', '1234', SHA2(CONCAT('xyzzy', '1234'), 256))

Но теперь вы видите пароль xyzzy в виде простого текста в журналах запросов и двоичных журналах, даже если он хранится в хешированной форме в самой таблице. Если вы не защитите свои журналы должным образом, хакер может получить их и найти пароль каждого.

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

INSERT INTO Accounts (user, salt, password) 
VALUES ('myuser', '1234', 'd3822b5f03ad0c1a363d874238f6b48fd68a131cc35d5e55c77a81db1d266b84')

Таким образом, простой текстовый пароль не регистрируется.

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

SELECT salt FROM Accounts WHERE user = ?

...calculate hash string using user input + salt...

SELECT password = ? AS password_matches FROM Accounts WHERE user = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...