如何将密码存储为有值然后检索它?

时间:2016-07-16 19:09:17

标签: sql sql-server

请参阅代码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

3 个答案:

答案 0 :(得分:1)

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

  

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

     

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

select hashbytes('SHA2_256 ','test')

<强>输出:
0x9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08

答案 1 :(得分:0)

它适用于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

答案 2 :(得分:0)

该算法可能会区分大小写。插入和选择的情况不匹配。

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