验证存储过程中的密码



我在验证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'。但当我用'sharingan1'替换@fPassword时,我得到了'c'(这正是我想要的)。

有人知道为什么

(CONVERT(NVARCHAR(4000), HASHBYTES('sha1', @fPassword), 1)) 

其中我设置了不同于的@fPassword = 'sharingan1'

(CONVERT(NVARCHAR(4000), HASHBYTES('sha1', 'sharingan1'), 1))

您的变量@fPassword是NVARCHAR。当您对字符串进行硬编码时,它的类型是VARCHAR。如果你在字符串前面放一个"N",就像在"N’sharinga1'"中一样,它们应该是等价的,因为这将字符串表示为NVARCHAR。或者,您可以将变量设置为VARCHAR类型。

编码很重要。

最新更新