哈希字节函数输出

Hashbytes function output

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

Select 密码,Hashbytes('SHA1', 'sa') returns 0x3608A6D1A05ABA23EA390E5F3B48203DBB7241F7.

稍后我手动将 table 字段更新为此值,但是 其中密码 = Hashbytes('SHA1', 'sa') 没有给我任何结果。我已经使用过 varbinary、binary、varchar、nvarchar 和 char 数据类型。请提出可能是什么问题以及我如何解决问题。谢谢。

根据 the documentation,对于 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'

returns no,因为 space 不足以正确存储结果;但是这个

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

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


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