2016-11-11 125 views
1

我想散列密码存储在我的数据库中运行到不当行为,我已经用下面的代码:
散列密码字段

ALTER PROCEDURE AddUser 
@name NVARCHAR(MAX), 
@password NVARCHAR(MAX), 
@responseMessage NVARCHAR(MAX) OUTPUT 
AS 
Begin 
    SET NOCOUNT ON 
     INSERT INTO [User] (Username, PasswordHashed) 
     VALUES (@name, HASHBYTES('SHA2_512', @password)); 
END 

现在我的表的实例具有以下状态(用户的密码是): enter image description here

为了验证用户,我用下面的代码:

SELECT COUNT(*) 
FROM [User] 
WHERE [User].Username = 'Bamdad' AND [User].PasswordHashed = HASHBYTES('SHA2_512', 'hi'); 

但结果是0。为什么后面的代码不工作?

回答

2

您在指定密码'hi'varchar,但过程需要nvarchar。所以varchar被提升为nvarchar与一个额外的字节,因此加密的差异。