使用T-SQL计算'nvarchar'字符串的SHA1哈希值

时间:2011-03-17 15:51:16

标签: tsql hash nvarchar

我正在尝试使用T-SQL计算unicode字符串的SHA1哈希值。以下代码适用于ASCII字符串:

declare @input varchar(50)
set @input = 'some text'
print 'SHA1 Hash: ' + UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0))

但是当我用declare @input nvarchar(50)替换第一行代码时,它会计算出错误的哈希值。

Calculated hash (nvarchar): BBA91B680CE2685E9465DE24967E425CF055B10F
Calculated hash by a tool : 37AA63C77398D954473262E1A0057C1E632EDA77

如何计算SHA1的<{1}}哈希?

[编辑]:

下面的C#代码生成与我用于散列的工具相同的散列:

nvarchar

1 个答案:

答案 0 :(得分:6)

当你将它与SQL Server返回的那个进行比较时,你确定你的工具返回的哈希是使用UTF16还是Unicode编码?... SHA1(以及其他编码格式)取决于在数据类型上,因此当作为输入给出时它应该返回不同的值。请查看this链接以获取更详细的说明。