gpt4 book ai didi

c# - 为什么 SqlCommand 不在 HASHBYTES 函数中传递参数?

转载 作者:行者123 更新时间:2023-11-30 19:54:59 26 4
gpt4 key购买 nike

我有一个简单的 SqlConnection 代码,其中有一个 HASHBYTES 函数来从我的服务器检索数据。

using (var connection = new SqlConnection(connectionString))
{
connection.Open();

using (var command = new SqlCommand(commandString, connection))
{
command.Parameters.Add(new SqlParameter("mail", email));
command.Parameters.Add(new SqlParameter("password", password));
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
return true;
}
throw new InvalidDataException();
}
}
}

commandString 属性如下所示:

DECLARE @pass varchar(50);
SET @pass = @password;

DECLARE @pwdHash varbinary(max);
SET @pwdHash = HASHBYTES('SHA2_256', @pass);

SELECT * FROM Users
WHERE email=@mail AND pwd=@pwdHash;

此代码有效,但为什么下面较短的代码无效?

在下面的例子中,函数没有进入 while 循环,而是抛出异常。

DECLARE @pwdHash varbinary(max);
SET @pwdHash = HASHBYTES('SHA2_256', @password);

SELECT * FROM Users
WHERE email=@mail AND pwd=@pwdHash;

在这两个代码中,@password 值都设置为 SqlParameter,所以它应该可以工作,对吗?还是我遗漏了什么?

最佳答案

字符串参数默认以nvarchar的形式传递;但是您的较长命令将 @password 转换为 varchar ,它具有不同的二进制表示形式,因此会生成不同的哈希摘要,如果它们的哈希生成方式不同,它将与您现有的记录不匹配.

顺便说一句,你也应该加盐。

关于c# - 为什么 SqlCommand 不在 HASHBYTES 函数中传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39983927/

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