gpt4 book ai didi

c# - SQL HASHBYTES 返回不同的值

转载 作者:行者123 更新时间:2023-12-01 19:43:11 24 4
gpt4 key购买 nike

在我的应用程序中,HASHBYTES SQL 函数为同一字符串返回不同的值。下面是我的用户创建代码。

Guid fillerG = Guid.NewGuid(); 
using (SqlCommand com = new SqlCommand("INSERT INTO App_Users (UserName, PasswordHash, PasswordSalt) VALUES ('" + userNameTxt.Text + "', HASHBYTES ( 'SHA1', CONVERT(NVARCHAR(100), '" + userPassword.Text + fillerG.ToString() + "') ), '" + fillerG.ToString() + "'; ", con))
{
com.ExecuteNonQuery();
}

当我比较登录页面中上面插入的行时,它不匹配。这是我的比较脚本。

SqlCommand loginCom = new SqlCommand("select COUNT(UserID) FROM App_Users WHERE UserName = '" + Login1.UserName + "' AND PasswordHash = HASHBYTES('SHA1', '" + Login1.Password + "' + CONVERT(NVARCHAR(36), PasswordSalt))", loginCon);

第一个代码将passwordHash存储为:

0xDAC9280F85B40C06314228876717E342432807DB

但是在查询窗口中,具有相同值的 HASHBYTES 函数返回:

 0xA561FBD35713F922AD761594658C193F12B82791

更新:检查此图像,代码存储的密码哈希与查询生成的密码不同(我给出的密码是“ee”)

Query Output

最佳答案

You are passing Two different String to HASHBYTES thats why you are getting the different Result.

在此查询中:

using (SqlCommand com = new SqlCommand("INSERT INTO App_Users (UserName, PasswordHash, PasswordSalt) VALUES ('" + userNameTxt.Text + "', HASHBYTES ( 'SHA1', CONVERT(NVARCHAR(100), '" + userPassword.Text +          fillerG.ToString() + "') ),  '" + fillerG.ToString() + "'; ", con))
{
com.ExecuteNonQuery();
}

您正在使用 userPassword.Text +fillerG.ToString() 作为字符串但是

在此查询中:

Login1.Password.Replace("'", "''") + "' + CONVERT(NVARCHAR(36), PasswordSalt))", loginCon);

您正在替换引号

Login1.Password.Replace("'", "''")

尝试这样:使用参数化查询

SqlCommand cmd = new SqlCommand("INSERT INTO App_Users (UserName, PasswordHash, PasswordSalt) VALUES (@username, HASHBYTES ( 'SHA1', CONVERT(NVARCHAR(100),@pass')),@salt), con)

cmd.Parameter.AddWithValue("@username",userNameTxt.Text);
cmd.Parameter.AddWithValue("@pass",userPassword.Text);
cmd.Parameter.AddWithValue("@salt",fillerG.ToString());

还有

 SqlCommand cmd = new SqlCommand("select COUNT(UserID) FROM App_Users WHERE UserName = @username AND PasswordHash = HASHBYTES ( 'SHA1', CONVERT(NVARCHAR(100),@salt)))), con)

cmd.Parameter.AddWithValue("@username",userNameTxt.Text);
cmd.Parameter.AddWithValue("@salt",Login1.Password);

Login1.Password and fillerG.ToString() must be Same

关于c# - SQL HASHBYTES 返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29195294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com