You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF程序中密码哈希存入SQL数据库后登录验证失败如何解决?

问题原因
  • 登录验证时未对用户输入的密码做哈希处理:注册环节你已经将明文密码通过Utils.hashPassword()计算为哈希值存入数据库,登录时直接拿用户输入的明文密码和数据库存储的哈希值比对,二者内容完全不一致,自然匹配失败。
  • 登录逻辑使用字符串拼接SQL语句,存在严重SQL注入风险,攻击者可构造特殊输入绕开身份验证,建议统一使用参数化查询。
修复方案

修改登录按钮的点击逻辑,先将用户输入的密码做相同的哈希计算后再参与查询,同时替换为参数化查询,修复后代码如下:

private void btnLogin_Click(object sender, RoutedEventArgs e)
{
    try
    { 
        using (SqlConnection connection = new SqlConnection(ConnectionSQL.conn))
        {
            connection.Open();
            string Username = txtbUsername.Text;
            // 对用户输入的登录密码做和注册时一致的哈希处理
            string hashedPassword = Utils.hashPassword(txtbPassword.Text);

            // 改用参数化查询避免SQL注入
            string sql = "SELECT * FROM USERTABLE where Username = @Username AND Password = @Password;";
            SqlCommand command = new SqlCommand(sql, connection);
            command.Parameters.AddWithValue("@Username", Username);
            command.Parameters.AddWithValue("@Password", hashedPassword);
            
            SqlDataReader reader = command.ExecuteReader();
            if (reader.HasRows)
            {
                MessageBox.Show("You Have Successfully Logged In");
                MainWindow Main = new MainWindow();
                txtbUsername.Text = "";
                txtbPassword.Text = "";
                this.Hide();
                Main.ShowDialog();
                this.Show();
            }
            else
            {
                MessageBox.Show("Invalid Credentials");
            }
            reader.Close();
            command.Dispose();
        }
    }
    catch (SqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    Console.ReadLine();
}
可选安全优化

当前你使用的SHA1哈希算法已经被攻破,且没有加盐处理,存在彩虹表破解风险,建议替换为更安全的哈希方案,比如PBKDF2、BCrypt等自带盐值和迭代次数的密码哈希算法。

内容的提问来源于stack exchange,提问作者Sebastian Marshall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:15:03