Синтаксис SQL при сравнении значения хеш-функции из базы данных с хеш-значением, переданным через TextBox - PullRequest
0 голосов
/ 11 декабря 2018

Для начала я предположил, что с этого момента и из нескольких предыдущих вопросов я заметил, что самый простой способ фактически "сравнить значения хеш-функции" с данными, переданными через базу данных, состоит в том, чтобы просто посмотреть, является ли запрос, оператор "SELECT", "WHERE", "FROM" (x = x2) "фактически был успешно выполнен (возвращая значение, большее нуля).

  private void button1_Click(object sender, EventArgs e)
    {
        string AppUsername = textBox2.Text.ToString();
        string AppPassword = textBox1.Text.ToString();

        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 ' /3751242/kak-heshirovat-parol ' 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();                                          //dbo.data?
        var cmd = new SqlCommand(@"SELECT Username, Hash FROM data WHERE (Hash = @savedPasswordHash");
        cmd.Parameters.AddWithValue("@savedPasswordHash", savedPasswordHash);//^ this should work right?

        if (cmd.ExecuteNonQuery() > 0) {
            MessageBox.Show(" Query successful..something matched..  ");

        }
    }

Я подтвердил, что локальная база данныхзаполняется хеш-значением, которое должно соответствовать тому, которое сравнивается.

Но я полагаю, что со вторым фрагментом кода что-то не так:

 SqlConnection con = new SqlConnection();
    con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
    con.Open();                                          //dbo.data?
    var cmd = new SqlCommand(@"SELECT Username, Hash FROM data WHERE (Hash = @savedPasswordHash");
    cmd.Parameters.AddWithValue("@savedPasswordHash", savedPasswordHash);//^ this should work right?

    if (cmd.ExecuteNonQuery() > 0) {
        MessageBox.Show(" Query successful..something matched..  ");

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

Обновление

Я только что понял, что полученная ошибка относится к фактическому соединению:

ExecuteNonQuery: свойство подключения не было инициализировано.

Я использую тот же код, что и для ввода значений.

 SqlConnection con = new SqlConnection();
        con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
        con.Open();   

Я все еще предполагаю, что проблема должна быть где-то с фактической настройкой запроса или параметрами, но я не уверен: /

Обновление 2

Iразобрался что не так с ошибкой инициализации.Как было сказано, я никогда не инициализировал соединение ..

Добавление следующего кода:

  cmd.Connection = con;

исправило это.

Код теперь выглядит следующим образом:

 SqlConnection con = new SqlConnection();
        con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
        con.Open();                                          //dbo.data?
        var cmd = new SqlCommand(@"SELECT Username, Hash FROM data WHERE (Hash = @savedPasswordHash");
        cmd.Connection = con;
        cmd.Parameters.AddWithValue("@savedPasswordHash", savedPasswordHash);//^ this should work right?

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

Но возвращает другую ошибку, связанную с фактическим синтаксисом моего запроса, с которым я изначально думал, что ошибка связана с этим.

В нем говорится, что неправильный синтаксис находится рядом с @savedPasswordHash.

Любой совет по синтаксису SQL приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...