说我有这样一张桌子:
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语句没有返回任何内容,这证明它是不正确的。
答案 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)