SQL Server 2012密码哈希不匹配

时间:2017-09-04 11:23:45

标签: c# sql-server parameters sha

我毫无疑问做了一些愚蠢的事情,但我在这里挣扎!

升级用户表的安全性。使用内置hashbytes pw的sql转换所有现有密码,现在不使用salt,直到我可以使用它。

表:admin有4条记录

当前密码:admin.password ='test'

update admin 
set passwordenc = hashbytes('SHA2_256', password);

passwordenc的类型为varbinary(50)

立即进入:

admin.passwordenc is 0x9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08

这就是我想要的。

我有一个带登录名的.net cshtml网站,有些代码:

var uname = Request["username"];
var upass = Request["password"];
var adsql = "select user_id, firstname, surname, profile, username from admin where username=@0 and passwordenc= hashbytes('SHA2_256', @1) ";

找不到记录。

在Chrome中的开发工具中,我可以看到“admin”传递用户名,“test”用于输入密码。

SQL Server Profiler显示:

exec sp_executesql N'select user_id, firstname, surname, profile, username from admin where username=@0 and passwordenc= hashbytes(''SHA2_256'', @1) ',
                   N'@0 nvarchar(5),@1 nvarchar(4)',@0=N'admin',@1=N'test'

在我的应用中,如果我试试这个:

var adsql = "select user_id, firstname, surname, profile, username from admin where username=@0 and passwordenc=hashbytes('SHA2_256', '"+ upass+"') ";

有效。

个人资料日志

exec sp_executesql N'select user_id, firstname, surname, profile, username from admin where username=@0 and passwordenc=hashbytes(''SHA2_256'', ''test'') ',N'@0 nvarchar(5),@1 nvarchar(4)',@0=N'admin',@1=N'test'

同样,如果我这样做

var adsql = "select user_id, firstname, surname, profile, username from admin where username=@0 and passwordenc= 0x9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08 ";

传递硬编码哈希它也有效。

因此,在非参数化中传递'test'是有效的,检查哈希也是如此,但@ 1没有,并且在分析器中看不到现在的错误。尝试过使用转换函数,尝试使用二进制文件检查字符串但得到相同的结果。

我做错了什么蠢事?

0 个答案:

没有答案