在哈希中使用盐

时间:2016-07-16 21:04:17

标签: sql sql-server

说我有这样一张桌子:

   create table [User] (ID int identity not null,EmailAddress varchar(50), [Password] nvarchar(128),primary key (ID))

我的阅读告诉我,我应该在桌子上加盐:

alter table [user] add salt nvarchar(128)

如果用户在应用程序中创建了一个帐户,那么我认为SQL应该如下:

declare @RandomNumber as varchar(32)
set @RandomNumber=rand();
insert into [user] (emailaddress,[password],salt) values ('test@hotmail.co.uk',hashbytes('sha2_256','passwordvalue' + @RandomNumber),@RandomNumber)

然后让我们说用户想要进行身份验证。 SQL就像这样:

select * from [user] where [password] = hashbytes('sha2_256','passwordvalue' + salt)

最后一条SQL语句没有返回任何内容,这证明它是不正确的。

1 个答案:

答案 0 :(得分:0)

使用varchar而不是nvarchar,有转换问题或将@RandomNumber声明为nvarchar(32),如下所示:

 declare @RandomNumber as nvarchar(32)
 set @RandomNumber=rand();
 insert into [user] (emailaddress,[password],salt) values ('test@hotmail.co.uk',hashbytes('sha2_256','passwordvalue' + @RandomNumber),@RandomNumber)