我正在做一个小项目,以熟悉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");
}
散列的密码无法验证。我希望能够对哈希密码进行身份验证,并验证用户是否可以连接到下一个表单。
答案 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")));
}