将密码散列到SQL中

pha*_*unk 1 passwords hash sql-server-2008

我像这样直接在SQL中哈希密码:

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

INSERT into Users (UserId,Password)
Values ('CryptTest',HASHBYTES('SHA1', @HashThis))
Run Code Online (Sandbox Code Playgroud)

结果:

在此处输入图片说明

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

在此处输入图片说明

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

Chr*_*son 5

问题1:之所以会得到“像中文一样”的字符,是因为要将HASHBYTES返回的varbinary值插入nvarchar列,因此SQL Server试图将字节解释为Unicode代码点(字符)。

问题2:SQL Server 2012之前不支持-请参阅SQL Server 2008 R2 HASHBYTES SHA2返回null