Проверка хеш-пароля для страницы входа в систему c # и sql - PullRequest
0 голосов
/ 04 декабря 2018

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

Это хранимая процедура, которую я создал для входа в систему:

CREATE PROCEDURE [dbo].[Logged]
    @Email NVARCHAR (50),
    @Password NVARCHAR (50)
AS
BEGIN
    SELECT * 
    FROM [dbo].[Register] 
    WHERE [Email] = @Email 
      AND [Password] = @Password
END 
GO

Вот код login.aspx.cs.

public string CheckPasswordQuery { get; private set; }

public string ToSHA2569(string value)
{
        SHA256 sha256 = SHA256.Create();
        byte[] hashData = sha256.ComputeHash(Encoding.Default.GetBytes(value));
        StringBuilder returnValue = new StringBuilder();

        for (int i = 0; i < hashData.Length; i++)
        {
            returnValue.Append(hashData[i].ToString());
        }

        return returnValue.ToString();
    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        try
        {
            using (SqlConnection sqlcon = new SqlConnection(connectionString))
            {
                sqlcon.Open();
                SqlCommand cmd = new SqlCommand("Logged", sqlcon);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Email", txtEmail.Text.Trim());
                cmd.Parameters.AddWithValue("@Password", ToSHA2569(txtPassword.Text.Trim()));
                cmd.ExecuteNonQuery();

                if(CheckPasswordQuery == ToSHA2569(txtPassword.Text))
                {
                }
            }
        }
    }

Буду благодаренесли кто-то сможет помочь мне с этим

ОБНОВЛЕНИЕ : этот код ближе?Я действительно ценю любую помощь

protected void btnSubmit_Click(object sender, EventArgs e)
{
    try
    {
        using (SqlConnection sqlcon = new SqlConnection(connectionString))
        {
            string user = txtEmail.Text;
            string pass = ToSHA2569(txtPassword.Text);

            sqlcon.Open();

            SqlCommand cmd = new SqlCommand("select @Email,@Password from [dbo].[Register] where Email=@Email and Password=@Password", sqlcon);
            cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
            cmd.Parameters.AddWithValue("@Password", ToSHA2569(txtPassword.Text));

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);

            if (txtEmail.Text ==  )
            {
                sqlcon.Close();
                Response.Redirect("default.aspx");
            }
            else
            {
                sqlcon.Close();
            }
        }
    }
    catch (Exception ex)
    {
        lblWrong.Text = "Something went wrong please try again later";
    }
}

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Проблема с @Password NVARCHAR (50). Это займет только первые 50 символов в хешированном пароле.

        StringBuilder Sb = new StringBuilder();

        using (SHA256 hash = SHA256Managed.Create())
        {
            Encoding enc = Encoding.UTF8;
            Byte[] result = hash.ComputeHash(enc.GetBytes(value));

            foreach (Byte b in result)
                Sb.Append(b.ToString("x2"));
        }

        return Sb.ToString();

Затем используйте @Password NVARCHAR (64)

Прочитайте это длябольше информации Как долго хеш SHA256?

0 голосов
/ 04 декабря 2018
 private void btnSubmit_Click(object sender, EventArgs e)
    {

        try
        {
            using (SqlConnection sqlcon = new SqlConnection(connectionString))
            {

                //string user = txtEmail.Text;
                //string pass = ToSHA2569(txtPassword.Text);
                sqlcon.Open();
                SqlCommand cmd = new SqlCommand("select count(*) from [dbo].[Register] where Email=@Email and Password=@Password", sqlcon);
                cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
                cmd.Parameters.AddWithValue("@Password", ToSHA2569(txtPassword.Text));

                var isCorrectPassword = cmd.ExecuteScalar();
                if ((int)isCorrectPassword >= 1)
                {
                    //sqlcon.Close();  //taken care of because of the using command
                    Response.Redirect("default.aspx");
                }
                else
                {
                //    sqlcon.Close();
                  lblWrong.Text = "Password not correct";
                }
            }
        }

        catch (Exception ex)
        {
            lblWrong.Text = "Something went wrong please try again later";
        }
    }

Не исправил некоторые другие вещи, но вы можете посмотреть на https://docs.microsoft.com/en-us/previous-versions/ff184050(v=vs.140)

...