C # Mysql datareader - как получить другой столбец, используя datareader - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь проверить пароль из моей базы данных, который был хэш и солен. Я создал столбец в моей пользовательской таблице username, hash and salt. Теперь я хочу знать, могу ли я получить доступ к другому значению столбца, используя datareader.

Я попробовал этот метод, но получил красную линию. Также это моя неудачная попытка

    public static bool VerifyPassword(string enteredPassword, string storedHash, string storedSalt)
{

    var saltBytes = Convert.FromBase64String(storedSalt);
    var rfc2898DeriveBytes = new Rfc2898DeriveBytes(enteredPassword, saltBytes, 10000);
    return Convert.ToBase64String(rfc2898DeriveBytes.GetBytes(256)) == storedHash;

}


private void bunifuFlatButton1_Click(object sender, EventArgs e)
{

    string userhash;
    string usersalt;

    MySqlConnection mysqlCon = new MySqlConnection(connectionString);
    MySqlCommand cmd = new MySqlCommand("SELECT * FROM login.info WHERE username = @user", mysqlCon);
    MySqlDataReader rd;
    rd = cmd.ExecuteReader();
    cmd.Parameters.Add("@user", MySqlDbType.VarChar).Value = username.Text;
    mysqlCon.Open();

    while (rd.Read())
    {

        userhash = rd.GetString("hash");
        usersalt = rd.GetString("salt");

        bool isPasswordMatched = VerifyPassword(textpass.Text, userhash.Hash, usersalt.Salt);
// i got redline error in here. i only follow instruction.. link below
        if (isPasswordMatched)
        {
            //Login Successfull
        }
        else
        {
            //Login Failed
        }
    }
}

, кстати, я только следую этой инструкции из этой темы. Как проверить засоленный и хешированный пароль в c #

1 Ответ

1 голос
/ 29 октября 2019

Вот еще один способ написания вашего кода, не совсем ответ, но ... не совершенный разум, но, по крайней мере, он избавится от объектов и также вызовет их в правильном порядке. Пожалуйста, ознакомьтесь с IDisposable и Sql Injection.

private void bunifuFlatButton1_Click(object sender, EventArgs e)
{
    using (MySqlConnection mysqlCon = new MySqlConnection(connectionString))
    {
                               // Use a named list of fields please. And cleanse the text.
        using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM login.info WHERE username = @user", mysqlCon))
        {
            cmd.Parameters.Add("@user", MySqlDbType.VarChar).Value = username.Text; // Let's hope user name is not Jimmy DropTables!!
            mysqlCon.Open();

            using (MySqlDataReader rd = cmd.ExecuteReader())
            {
                while (rd.Read())
                {
                    string userhash = rd.GetString("hash");
                    string usersalt = rd.GetString("salt");

                    bool isPasswordMatched = VerifyPassword(textpass.Text, userhash, usersalt);
                    // Note that we are passing in strings, not props of an unknown object
                    if (isPasswordMatched)
                    {
                        //Login Successfull
                    }
                    else
                    {
                        //Login Failed
                    }
                }
            }

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