Bcrypt в MySQL?

#mysql #stored-procedures #hash #passwords #bcrypt

#mysql #хранимые процедуры #хэш #пароли #bcrypt

Вопрос:

Я сохраняю свои пароли в виде хэша bcrypt в базе данных MySQL. С MD5 и SHA1 можно было запускать функцию хеширования внутри базы данных. Теперь мне интересно, возможно ли запустить bcrypt внутри MySQL. Я хотел бы создать учетную запись пользователя внутри базы данных.

Я не смог найти это в руководстве или я пропустил это? Может быть, как хранимая процедура?

Ответ №1:

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

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

Комментарии:

1. Спасибо. Я не упоминал, что думал только о создании учетной записи, а не о проверке входа.

2. @PiTheNumber — Создание само по себе действительно сработало бы, но когда я в последний раз проверял, я не нашел в MySQL какой-либо подходящей функции для хэширования паролей. На самом деле это было бы довольно сложно реализовать, потому что люди будут ожидать, что это сработает и для проверки, и тогда оптимизатору придется анализировать SQL и присваивать хэш-функции наименьший приоритет (и надеяться, что есть и другие фильтры, такие как username).