[英]Why is this Salt CAST as NVARCHAR(32) in SQL Server?
我了解了使用 HASHING 和 Salt 在 SQL 服務器數據庫中存儲密碼。 這段代碼是在線的,沒有真正有用的評論部分,所以我想在這里問一下。
為什么在這里將@salt
為NVARCHAR(36)
?
我嘗試了不同的長度,例如NVARCHAR(50)
,在數據庫中, Salt
仍然保存為長度為 36 的字符串。
例如:
B25243D7-A126-48A8-90F2-5898572F54D2
E29E1CEF-DBE1-4373-9510-A911BA0C8672
CREATE TABLE dbo.[User1]
(
UserID INT IDENTITY(1,1) NOT NULL,
LoginName NVARCHAR(40) NOT NULL,
PasswordHash BINARY(64) NOT NULL,
Salt UNIQUEIDENTIFIER,
FirstName NVARCHAR(40) NULL,
LastName NVARCHAR(40) NULL,
CONSTRAINT [PK1_User_UserID] PRIMARY KEY CLUSTERED (UserID ASC)
)
CREATE PROCEDURE dbo.uspAddUser1
@pLogin NVARCHAR(50),
@pPassword NVARCHAR(50),
@pFirstName NVARCHAR(40) = NULL,
@pLastName NVARCHAR(40) = NULL,
@responseMessage NVARCHAR(250) OUTPUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @salt UNIQUEIDENTIFIER=NEWID()
BEGIN TRY
INSERT INTO dbo.[User1] (LoginName, PasswordHash, Salt, FirstName, LastName)
VALUES(@pLogin, HASHBYTES('SHA2_512', @pPassword+CAST(@salt AS NVARCHAR(36))), @salt, @pFirstName, @pLastName)
SET @responseMessage = 'Success'
END TRY
BEGIN CATCH
SET @responseMessage = ERROR_MESSAGE()
END CATCH
END
DECLARE @responseMessage NVARCHAR(250)
EXEC [dbo].[uspAddUser1]
@pLogin = 'admin2',
@pPassword = '123456',
@pFirstName = 'John',
@pLastName = 'Smith',
@responseMessage = @responseMessage OUTPUT
SELECT * FROM [dbo].[User1]
這是因為DECLARE @salt UNIQUEIDENTIFIER=NEWID()
。 在 sql 服務器NEWID()
function 返回一個字符長度為 36 的UNIQUEIDENTIFIER
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.