如何使用HashBytes与SQL Server查询使用整数值

时间:2011-07-05 14:02:02

标签: sql-server hash integer sha1

我正在尝试对用户名和密码匹配的用户名表进行查询。该表是预先存在的(在公司软件安装期间创建)表,我无法更改加密类型或方法。使用字符串作为密码的查询完全正常但当我尝试使用整数查询时,查询返回null。

"SELECT *
 FROM ITF_USER
 WHERE ITF_LOGIN = '$lcUserName'
 AND ITF_PASS = HashBytes('SHA1', '$lcPassword')";

如果密码类似于'helloworld',那么查询工作正常,但'1121321'不会返回任何内容。有什么建议吗?

更新 如果我将表存储的密码与php的sha1($ lcPassword)结果进行比较,我会看到导致空查询结果的细微差别:

table -> 0x3FEEAC0B3A75CF1C12A8420CDE593FA275CCE584
sha1()->   8feeac0b3a75cf1c12a8420cde598fa275cce584

sha1()结果中有两个8应该是3的

1 个答案:

答案 0 :(得分:1)

我试过了:

declare @vc varchar(255), @nvc nvarchar(255)
set @vc = '1111'
set @nvc = '1111'
select hashbytes('sha1', @vc)
select hashbytes('sha1', @nvc)

它返回了不同的值:

varchar  = 0x011C945F30CE2CBAFC452F39840F025693339C42
nvarchar = 0x40C7BD210D05DBEA19402B952DD416E487450955

在调用HashBytes()时,似乎第二个参数的数据类型有所不同。当您使用字符串并且varchar转换为int(或反之亦然)时,可能会传递nvarchar

将所有内容强制为一种类型可能会有效:HashBytes('SHA1', cast('$lcPassword' as varchar(255))