首页 文章

验证存储过程中的密码

提问于
浏览
4

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

例如:

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))

1 回答

  • 5

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

    编码很重要 .

相关问题