Sql server 2008 将密码散列到SQL中

Sql server 2008 将密码散列到SQL中,sql-server-2008,passwords,hash,Sql Server 2008,Passwords,Hash,我直接在SQL中哈希密码,如下所示: DECLARE @HashThis nvarchar(4000); SET @HashThis = 'SecretPizza' INSERT into Users (UserId,Password) Values ('CryptTest',HASHBYTES('SHA1', @HashThis)) 结果: 当我尝试将SHA1算法更改为SHA2_256或SHA2_512时,我得到以下错误: 问题1-这真的应该给我类似中文的字符吗 问题2-这些是有效的算

我直接在SQL中哈希密码,如下所示:

DECLARE @HashThis nvarchar(4000);
SET @HashThis = 'SecretPizza'

INSERT into Users (UserId,Password)
Values ('CryptTest',HASHBYTES('SHA1', @HashThis))
结果:

当我尝试将
SHA1
算法更改为
SHA2_256
SHA2_512
时,我得到以下错误:

问题1-这真的应该给我类似中文的字符吗
问题2-这些是有效的算法,为什么我不能使用它们?为什么加密设置
@HashThis
为空

第一件事

从dual中选择HASHBYTES('SHA2-256',@HashThis)

看看你得到了什么…

首先做

从dual中选择HASHBYTES('SHA2-256',@HashThis)

然后看看你得到了什么。

问题1:你得到了“类似汉语”的字符,因为你在nvarchar列中插入了一个由HASHBYTES返回的varbinary值,所以SQL Server试图将字节解释为Unicode码点(字符)

问题2:在SQL Server 2012之前不受支持-请参见问题1:您会得到“类似中文”的字符,因为您将HASHBYTES返回的varbinary值插入nvarchar列,因此SQL Server尝试将字节解释为Unicode码点(字符)


问题2:在SQL Server 2012之前不受支持-请参见

列用户的数据类型。密码?不要为此使用
hashbytes
-不能使用
hashbytes
,而且您只能选择较差的(已损坏的)算法。而是在应用程序级别使用<代码> BCRIPT < /代码>并插入从它生成的哈希。@克里斯迪克森是NVARCHAR。应该是什么?列用户的数据类型是什么。密码?不要为此使用
hashbytes
——你不能使用
hashbytes
,而且你只能选择糟糕的(已经损坏的)算法。而是在应用程序级别使用<代码> BCRIPT < /代码>并插入从它生成的哈希。@克里斯迪克森是NVARCHAR。应该是什么?如果你尝试
select HASHBYTES('SHA2_256',@HashThis)
-注意算法名称中的下划线而不是连字符。是的,我在问题中使用了下划线。如果你尝试
select HASHBYTES('SHA2_256',@HashThis),你仍然会得到吗
-注意算法名称中的下划线,而不是连字符。是的,我在我提出的问题中使用了下划线。噢,谢谢。既然你解释了它,我发现它很简单..-.-为了获得最佳结果,我应该将我的列类型设置为什么?VARBINARY,但请参见添加的问题2的答案!!哦,谢谢。既然你解释了它,我发现它很简单..-.-为了获得最佳结果,我应该将我的列类型设置为什么?VARBINARY,但请参见添加的问题2的答案!!