在散列密码字段期间遇到错误行为

时间:2016-11-11 11:53:31

标签: sql-server

我想在我的数据库中存储散列密码,我使用了以下代码:

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

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

为了验证用户我使用以下代码:

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

但结果是0。为什么后一个代码不起作用?

1 个答案:

答案 0 :(得分:2)

您将密码<div id="graph" onload="function()"></div> 指定为'hi',但程序需要varchar。因此nvarchar会被一个额外的字节提升为varchar,因此加密的差异。