Здравствуйте, мне нужно сохранять пароли аккаунтов в базе данных, почитал об этом и понял, что нужно в БД хранить не сами пароли, а ключи. Попытался реализовать кое что, вот код:
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 байт.
Я пробовал менять знаки ? на @, все равно проблема остается.