Я пытаюсь сохранить пароли в своей таблице пользователей. Конечно, я хочу их посолить и перемешать.
Но в mysql больше нет метода hash (). Как это сделать в версии 8.0? Есть ли альтернативы?
Заранее спасибо за помощь.
Пожалуйста, включите сообщение об ошибке точный, а не какое-то его приближение. MySQL не имеет общей функции HASH(). Вы можете спутать его с HASH() метод разметки.
И в дополнение к отсутствию функции hash, MySQL 8.0.11+ также не имеет функции пароль().






Вы должны хэшировать пароли в своем приложении, прежде чем отправлять их в 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 = ?