2016-11-11 39 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與一個額外的字節,因此加密的差異。