请参阅代码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
答案 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'子句。所以,你可以看看它们是否真的相同。