验证存储过程中的密码

时间:2013-08-10 00:49:44

标签: sql sql-server-2008 stored-procedures passwords

我在验证SQL Server存储过程中的帐户时遇到问题。我所做的是我哈希比特用户的密码。当他想登录他的帐户时,我再次对参数(@fPassword)进行哈希处理,并将其与数据库中的哈希字节密码进行比较。问题是我不断获得不同的价值。

例如:

declare @fPassword nvarchar(4000)
set @fPassword = 'sharingan1'
IF (CONVERT(NVARCHAR(4000), HASHBYTES('sha1', @fPassword), 1)) <> (select fPassword from CustomerTable WHERE fUserName = 'cesark14')
BEGIN 
    print 'b'
END
else
    print 'c'

我一直在'b'。但当我替换@fPassword的{​​{1}}时,我得到'sharingan1'(这就是我想要的)。

有人知道为什么是

'c'

我将(CONVERT(NVARCHAR(4000), HASHBYTES('sha1', @fPassword), 1)) 设置为与

不同
@fPassword = 'sharingan1'

1 个答案:

答案 0 :(得分:5)

你的变量@fPassword是NVARCHAR。对字符串进行硬编码时,它的类型为VARCHAR。如果在字符串前面加上'N',就像在“N'sharingan1”中那样,它们应该是等价的,因为它将字符串表示为NVARCHAR。或者您可以使您的变量为VARCHAR类型。

编码很重要。