0

我在使用 MSSQL 2008 R2 的 Hashbytes 函数时遇到了一个奇怪的情况。

选择密码,Hashbytes('SHA1', 'sa') 返回 0x3608A6D1A05ABA23EA390E5F3B48203DBB7241F7。

后来我手动将我的表字段更新为这个值,但是 Where Password = Hashbytes('SHA1', 'sa') 没有给我任何结果。我已经使用了 varbinary、binary、varchar、nvarchar 和 char 数据类型。请提出可能是什么问题以及我如何解决问题。谢谢。

4

1 回答 1

0

根据文档,对于 SHA-1,您的输出大小为“SHA 和 SHA1 的 160 位(20 字节)”。

因此:

declare @password varbinary(19); 
set @password = HASHBYTES('SHA1','sa'); 
if @password= HASHBYTES('SHA1','sa') 
    print 'yes'; 
else 
    print 'no'

return no,因为没有足够的空间来正确存储结果;但是这个

declare @password varbinary(20); 
set @password = HASHBYTES('SHA1','sa'); 
if @password= HASHBYTES('SHA1','sa') 
    print 'yes'; 
else 
    print 'no'

返回yes。如果您的Password字段是binaryvarbinary并且有 20 个字节的空间,您应该没问题。


顺便说一句,如果你只指定binaryor varbinary,没有长度,你会得到1个字节,这通常不是你想要的。

于 2015-05-19T14:29:06.503 回答