我使用MSSQL 2008 R2的Hashbytes函数有一个奇怪的情况。
选择密码,Hashbytes('SHA1','sa')返回 0x3608A6D1A05ABA23EA390E5F3B48203DBB7241F7。
稍后我手动将我的表字段更新为此值,但是 密码= Hashbytes('SHA1','sa') 没有给我任何结果。我已经使用了varbinary,binary,varchar,nvarchar和char数据类型。请建议可能出现的问题以及如何解决问题。感谢。
答案 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
字段为binary
或varbinary
并且有20个字节的空间,那么您应该没问题。
顺便说一下,如果您只指定binary
或varbinary
,而没有长度,则会得到 1 字节,这通常不是您想要的。