哈希字节函数输出
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
字段是 binary
或 varbinary
并且有 20 个字节的空间,您应该没问题。
顺便说一句,如果你只指定binary
或varbinary
,没有长度,你得到1个字节,这通常不是你想要的想要。
我在使用 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
字段是 binary
或 varbinary
并且有 20 个字节的空间,您应该没问题。
顺便说一句,如果你只指定binary
或varbinary
,没有长度,你得到1个字节,这通常不是你想要的想要。