簡體   English   中英

為什么在 SQL 服務器中此 Salt CAST 為 NVARCHAR(32)?

[英]Why is this Salt CAST as NVARCHAR(32) in SQL Server?

我了解了使用 HASHING 和 Salt 在 SQL 服務器數據庫中存儲密碼。 這段代碼是在線的,沒有真正有用的評論部分,所以我想在這里問一下。

為什么在這里將@saltNVARCHAR(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM