【问题标题】:How do you store a password as a has value and then retrieve it?您如何将密码存储为具有值然后检索它?
【发布时间】:2016-11-19 18:12:08
【问题描述】:

请看代码SQL:

create table [User] (ID int identity not null,EmailAddress varchar(50), [Password] BINARY(32),primary key (ID))
INSERT INTO [User] (EmailAddress,[Password]) values ('testuser@hotmail.co.uk',hashbytes('SHA256','test'))

在密码字段中输入了一个空值。这是为什么呢?

我希望以下查询会返回一行,但它不返回任何行:

SELECT * FROM [User] where password = hashbytes('sha256','test')

您可能会说我是散列算法的新手。

以下问题表明您应该将密码存储为 BINARY(32):CHAR(64) or BINARY(32) To Store SHA256 Hash in SQL SERVER

【问题讨论】:

  • 从不使用它,但尝试hashbytes( 'SHA2_256',´test´) 你在插入和选择中都缺少数字 2 和取消划线字符
  • @Horaciux,该值仍然为空。
  • 它对我有用,我把它作为答案发布给你看

标签: sql sql-server


【解决方案1】:

documentation,我可以看到没有 Sha256 算法。可用的是..

HASHBYTES ('', { @input | 'input' })

::= MD2 | MD4 | MD5 |沙 | SHA1 | SHA2_256 | SHA2_512

select hashbytes('SHA2_256 ','test')

输出:
0x9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08

【讨论】:

    【解决方案2】:

    算法可能区分大小写。 insert 和 select 的大小写不匹配。

    查找问题:您可以通过电子邮件选择并打印保存的密码以及您的“where”子句之一。所以,你可以看看它们是否真的相同。

    【讨论】:

      【解决方案3】:

      它适用于 SQL Server 2012 express

      create table [User] (ID int identity not null,EmailAddress varchar(50), [Password] BINARY(32),primary key (ID))
      INSERT INTO [User] (EmailAddress,[Password]) values ('testuser@hotmail.co.uk',hashbytes('SHA2_256','test'))
      
      SELECT * FROM [User] where password = hashbytes('SHA2_256','test')
      
      ID  EmailAddress    Password
      1   testuser@hotmail.co.uk  0x9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-15
        • 1970-01-01
        • 2013-03-16
        • 2015-06-12
        • 2017-09-23
        • 1970-01-01
        • 2019-01-31
        相关资源
        最近更新 更多