Авторизация Сравнение хеш-значения в базе данных

Я пытаюсь сделать простой вход в часть создаваемого приложения. Чтобы подтвердить вход, я просто пытаюсь убедиться, что хеш-значение введенного пароля совпадает с тем, что хранится в моей локальной базе данных: App_Users) '

ButtonClick:

        string AppUsername = textBox2.Text.ToString();
        string AppPassword = textBox1.Text.ToString();
        //- Hashed-V-
        byte[] salt;
        new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);
        var pbkdf2 = new Rfc2898DeriveBytes(AppPassword, salt, 10000);
        byte[] hash = pbkdf2.GetBytes(20);
        byte[] hashBytes = new byte[36];
        Array.Copy(salt, 0, hashBytes, 0, 16);
        Array.Copy(hash, 0, hashBytes, 16, 20);
        string savedPasswordHash = Convert.ToBase64String(hashBytes);                                                                   //              <--  see ' https://stackoverflow.com/questions/4181198/how-to-hash-a-password ' for the part on comparing the recalculated 
        //-
        SqlConnection con = new SqlConnection();
        con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
        con.Open();                

        var cmd = new SqlCommand(@"SELECT Username, Hash FROM App_Users WHERE (Hash = @Hash");
        cmd.Connection = con;
        savedPasswordHash = cmd.ExecuteScalar() as string;

        if (cmd.ExecuteNonQuery() > 0) {
            MessageBox.Show(" Query successful..something matched..  ");
            //change page.. load a profile? 
        }

Однако я получаю сообщение об ошибке:

 'Must declare the scalar variable "@Hash".'

Я искал, но не уверен, что следующим шагом для того, что я пытаюсь сделать, является ... Извините, это, вероятно, плохой вопрос, с точки зрения sql. Думаю дело в переходнике?

если вы используете параметры, вам действительно нужно их добавить! См. docs.microsoft.com/en-us/dotnet/framework/data/adonet/…

Mitch Wheat 15.12.2018 05:55
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не передали значение параметра @Hash в запросе. И вы также должны проверить имя пользователя в запросе, иначе попытка входа в систему будет успешной, если вход в систему любой использует данный пароль.

Попробуйте что-нибудь вроде:

...
var cmd = new SqlCommand(@"SELECT Username, Hash FROM App_Users WHERE Hash = @Hash AND Username = @Username");
cmd.Connection = con;
cmd.Parameters.Add("@Hash", SqlDbType.VarChar, 48).Value = savedPasswordHash;
cmd.Parameters.Add("@Username", SqlDbType.NVarChar, 32).Value = AppUsername;

if (cmd.ExecuteNonQuery() > 0) {
...

Это предполагает, что App_Users.Hash - это VARCHAR(48), а App_Users - это NVARCHAR(32). Возможно, вам придется изменить его, чтобы он соответствовал типам данных, которые вы действительно используете.

Однозначно моя ошибка>. <Спасибо! он больше не выдает ошибок. Тем не менее, messageBox все еще не отображается. Есть ли какой-нибудь другой способ подтвердить, что он работает? (помимо Executenonquery)

Jponder23 15.12.2018 08:31

Другие вопросы по теме