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