将哈希值从数据库转换为可读的字符串

时间:2019-06-03 16:48:22

标签: c# sql-server hash

我正在做一个小项目,以熟悉C#/。NET。我正在尝试通过表单对本地SQL Server的“用户”表上的用户进行身份验证。密码是散列的(不加盐-仅用于测试)。我的问题是我不确定如何将数据库中的哈希密码值(SHA512)转换为字符串。我应该使用其他方法吗?

从我正在阅读的内容中,我认为我必须使用Convert.ToBase64String方法,但是我不确定如何处理它,或者我是否处在正确的轨道上。这就是我所拥有的。

        SqlConnection con = new SqlConnection(@"Data Source=myLocalSQLServer;Initial Catalog=libtest;Integrated Security=True");
        SqlDataAdapter sqa = new SqlDataAdapter("Select count(*) from Users where UserName = '"+ UserName.Text +"' and Password = '"+ Password.Text +"'",con);
        DataTable dt = new DataTable();
        sqa.Fill(dt);


        if(dt.Rows[0][0].ToString() == "1")
        {
            MessageBox.Show("Login Successful!");

        }
        else
        {
            MessageBox.Show("Username or Password is incorrect");
        }

散列的密码无法验证。我希望能够对哈希密码进行身份验证,并验证用户是否可以连接到下一个表单。

1 个答案:

答案 0 :(得分:0)

您的密码已经在数据库中进行了哈希处理,因此您必须比较数据库中存储的哈希值和用户输入的哈希值。看下面的例子。

    static void Main(string[] args)
    {
        SHA512Cng sha = new SHA512Cng();
        var hash = sha.ComputeHash(Encoding.UTF8.GetBytes(Password_field.Password));
        var hexSignature = ToHexString(hash);
    }

    public static string ToHexString(byte[] array)
    {
        return string.Concat(Array.ConvertAll(array, b => b.ToString("x2")));
    }