2015-05-19 55 views
0

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

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

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

回答

0

根据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,没有长度,你会得到字节,这是通常不是你想要的。

+0

工作的很好,谢谢! –