1

我在 SQL 中直接像这样散列密码:

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

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

结果 :

在此处输入图像描述

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

在此处输入图像描述

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

4

2 回答 2

5

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

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

于 2012-07-27T15:59:54.113 回答
0

先做

从对偶中选择 HASHBYTES('SHA2-256', @HashThis);

看看你得到了什么..

于 2012-07-27T15:48:18.330 回答