MadMyche
Как уже говорилось ранее, ваш код созрел для того, чтобы Уязвимость SQL-инъекции.
Никогда не стройте вместе и Sql-команду с пользовательским вводом, вы всегда должны использовать Parameter
s для добавления пользовательского контента в команду. Это также имеет то преимущество, что поставщик данных SQL будет автоматически устанавливать типы (INT, VARCHAR, DATE) на основе предоставляемого содержимого (если это не так НУЛЕВОЙ).
Способ, которым я бы написал код, состоял бы в том, чтобы следовать этому порядку операций:
1. SQL-команда для получения Пароль на основе имени пользователя.
2. Выполните скалярную команду - если нет возврата имя пользователя его не нашли.
3. Используйте все, что угодно Hash
функция была применена к сохраненному паролю при возврате
4. сравните хэшированную версию попытки ввода пароля с тем, что было сохранено в БД
Это основная структура того, как это будет выглядеть. Вам нужно будет соответствующим образом настроить код для вашей структуры таблицы и функций
(Извините, у меня нет времени исследовать, что у вас есть в использовании, и эта клавиатура плохая, поэтому я опустил некоторые символы/скобки)
SqlCommand cmd = new SqlCommand("SELECT PasswordHash FROM AccountTable WHERE UserName = @UserName", conn);
cmd.Parameters.AddWithValue("UserName", TextBox1.Text);
conn.Open();
var SqlReturn = cmd.ExecuteScalar();
if (SqlReturn == null)
// account not found
else
string PasswordAttempt = HashFunctionName(TextBox2.Text); // whatever this function is called
if (PasswordAttempt != SqlReturn.ToString()
// login failed
else
// Success