将密码散列到SQL中

时间:2012-07-27 15:44:39

标签: sql-server-2008 passwords hash

我正在SQL中直接哈希密码:

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

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

结果:

enter image description here

当我尝试将SHA1算法更改为SHA2_256SHA2_512时,我收到以下错误:

enter image description here

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

2 个答案:

答案 0 :(得分:4)

问题1:您将获得“类似中文”字符,因为您正在将HASHBYTES返回的varbinary值插入nvarchar列,因此SQL Server正在尝试将字节解释为Unicode代码点(字符)。

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

答案 1 :(得分:0)

首先做

从双重选择HASHBYTES('SHA2-256',@ HashThis);

看看你得到了什么..