@graf45231

Как сохранить хэш пароля в БД MySQL?

Здравствуйте, мне нужно сохранять пароли аккаунтов в базе данных, почитал об этом и понял, что нужно в БД хранить не сами пароли, а ключи. Попытался реализовать кое что, вот код:

public static void SetPassword(string userName, string userPassword)
        {
            string sql = "";
            byte[] salt = new byte[20], key = new byte[20];
            using (var deriveBytes = new Rfc2898DeriveBytes(userPassword, 20))
            {
                salt = deriveBytes.Salt;
                key = deriveBytes.GetBytes(20);
 
                sql = $"UPDATE `accounts` SET `password_key`= '?key', `password_salt`= '?salt' WHERE `username` = '{userName}'";
            }
            using (var cmd = new MySqlCommand(sql, conn))
            {
                cmd.Parameters.Add(new MySqlParameter("?key", key));
                cmd.Parameters.Add(new MySqlParameter("?salt", salt));
                cmd.ExecuteNonQuery();
            }
        }]

Но почему то в БД сохраняется не 20-ти байтнный ключ, а 4. В чем может быть проблема?
Причем перед строкой cmd.ExecuteNonQuery(); проверяю размер salt и key, размер равен 20 байтам. Но в БД сохраняется 4 и 5 байт.
Я пробовал менять знаки ? на @, все равно проблема остается.

5e47edf9bc26b316537697.png
  • Вопрос задан
  • 265 просмотров
Решения вопроса 1
twobomb
@twobomb
В общем всё понятно, вы записывайте туда значение ?key равное 4 байтам (по одному байту на символ) и ?salt равное 5 байтам.Измените ваш SQL на
sql = @"UPDATE `accounts` SET `password_key`= ?key, `password_salt`= ?salt WHERE `username` = '{userName}'";

Убраны кавычки
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@byreoil
Какой тип данных в БД имеют эти поля?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы