【问题标题】:Hashbytes function outputHashbytes 函数输出
【发布时间】:2015-07-31 10:00:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql-server hashbytes


    【解决方案1】:

    根据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字节,这通常不是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多