【发布时间】:2021-10-03 04:23:13
【问题描述】:
抱歉我的无知,但我想在我的数据库中存储散列密码,
如何使用HASHBYTES 方法将哈希密码存储在Users 表中?
CREATE TABLE [Users](
EmailAddress NVARCHAR(320) UNIQUE,
UserID INT IDENTITY(1,1) PRIMARY KEY,
UserPassword NVARCHAR(32), -- I Edited the length
FirstName VARCHAR(256) not null,
LastName VARCHAR(256) not null,
MobileNumber BIGINT,
)
--我查了一下,发现这是哈希密码的方法
declare @afterhash varbinary(256) = HASHBYTES('SHA2_256', 'P@ssw0rd')
但是如何将它们结合起来呢?
【问题讨论】:
-
我并没有真正关注。除此之外,您已将
UserPassword定义为varchar(16),因此varbinary(8000)永远不适合,您在这里挣扎什么? -
@Larnu 再次嗨,我正在为如何在第一次插入时对密码进行哈希处理而苦苦挣扎,它是否应该在从客户端传递用户数据时调用的单独函数中?我的意思是如果我在这里执行
INSERT INTO声明会怎样? -
只需将
HASHBYTES作为INSERT的一部分包含在参数化语句中即可。同样,我不明白这里的问题是什么,除了UserPassword列不适合目的(因为它太小) -
除了以前的cmets,
UserPassword VARCHAR(8000)是用来存储字符的。HASHBYTES返回varbinary数据,其长度取决于选择的散列函数。例如:SHA2_256返回varbinary(32),因为 256 位是 32 个字节。 -
... 在文档中,存储的是 unhashed 值,@ExtraSun,而不是散列值。而且它不是文档中的密码,只是一个要散列的值。
标签: sql sql-server hash passwords