想知道我是否可以通过查询获得一些帮助。
表格结构
UserID BigInt Primary Auto
UserName VarChar(64)
UserPass VarChar(Max)
UserHash VarChar(Max)
插入用户
SET @HASH = ABS(CHECKSUM(CRYPT_GEN_RANDOM(32)));
SET @PW = 0x0200 + @HASH + HASHBYTES('SHA2_512', CAST(@UP AS VARBINARY(MAX)) + @HASH);
Insert Into [MY].[USERS_TABLE]
(UserName, UserPass, UserHash)
Values
(@UN, @PW, @HASH);
这一切都按预期运行已存储,密码存储用哈希加密
我的问题源于选择用户a.k.a. a Login
Declare @Hash VarBinary(Max);
Declare @Pass VarBinary(Max)
Set @Hash = (Select userHash From MY.USERS_TABLE Where UserName = @UN);
SET @Pass = 0x0200 + @Hash + HASHBYTES('SHA2_512', CAST(@UP AS VARBINARY(MAX)) + @Hash);
Select userID, PWDCOMPARE(@UP, @Hash) As PWCompared
From MY.USERS_TABLE
Where UserName = @UN
AND
UserPass = @Pass;
现在,这确实有效,但是,我宁愿使用PWDCOMPARE函数而不是针对UserPass列检查@Pass,但它总是返回0
是的,我确信我传递给它的信息是正确的:)
我该怎么做?
答案 0 :(得分:2)
在第一个片段中,您将@HASH存储在UserHash列中。因此,我认为你使用的东西是我怀疑的(ABS(CHECKSUM(CRYPT_GEN_RANDOM(32)))。
然后在下一个片段中,将@Hash设置为UserHash列中的该值,然后使用PWDCOMPARE进行比较。所以你要比较那个函数中的错误值。
此外,PWDCOMPARE documentation表示散列应该是varbinary(128)。