Hashbytes函数输出

时间:2015-05-19 14:03:08

标签: sql-server hashbytes

我使用MSSQL 2008 R2的Hashbytes函数有一个奇怪的情况。

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

稍后我手动将我的表字段更新为此值,但是 密码= Hashbytes('SHA1','sa') 没有给我任何结果。我已经使用了varbinary,binary,varchar,nvarchar和char数据类型。请建议可能出现的问题以及如何解决问题。感谢。

1 个答案:

答案 0 :(得分:0)

Per 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'

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

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

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

顺便说一下,如果您只指定binaryvarbinary,而没有长度,则会得到 1 字节,这通常不是您想要的。