我尝试了很多谷歌搜索并遵循一些教程。我正在使用MS SQL并尝试创建一个简单的User表和salt并对密码进行哈希处理,但是还没有涉及到Salting部分。
该表如下所示:
CREATE TABLE dbo.[User] (
UserID INT IDENTITY(1,1) NOT NULL,
Email NVARCHAR(45) NOT NULL,
Password BINARY(64) NOT NULL,
FirstName NVARCHAR(45) NULL,
LastName NVARCHAR(45) NULL,
CONSTRAINT [PK_User_UserID] PRIMARY KEY CLUSTERED (UserID ASC)
)
过程如下:
ALTER PROCEDURE dbo.[uspAddUser]
@pEmail NVARCHAR(45),
@pPassword NVARCHAR(45),
@pFirstName NVARCHAR(45) = NULL,
@pLastName NVARCHAR(45) = NULL,
@responseMessage NVARCHAR(250) OUTPUT
AS
BEGIN
SET NOCOUNT ON
BEGIN TRY
INSERT INTO dbo.[User] (Email, Password, FirstName, LastName)
VALUES (@pEmail, HASHBYTES('SHA_512', @pPassword), @pFirstName, @pLastName)
SET @responseMessage = 'Success'
END TRY
BEGIN CATCH
SET @responseMessage = ERROR_MESSAGE()
END CATCH
END
当我尝试使用该过程插入时将不起作用:
DECLARE @responseMessage NVARCHAR(250)
EXEC dbo.[uspAddUser]
@pEmail = N'Admin@email.com',
@pPassword = N'123',
@pFirstName = N'Admin',
@pLastName = N'Administrator',
@responseMessage=@responseMessage OUTPUT
SELECT *
FROM [dbo].[User]
未显示结果。正常插入然后检索结果后,它会显示新创建的元组,但ID会像创建其他元组一样自动递增。我不太确定问题出在哪里,如果别人理解我会很感激。
编辑:
已解决
显然是我使用了错误的sha哈希。我应该使用 SHA2_512。
,而不是使用SHA_512。答案 0 :(得分:1)
HASHBYTES('SHA_512', @pPassword)
返回null
,以便插入查询被中止。相反,您可以使用算法SHA2_512
或SHA2_256
或所需的任何其他加密算法。
查看this link了解更多信息。