2

我正在尝试SHA1使用 T-SQL 计算 unicode 字符串的哈希值。下面的代码适用于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

如何计算SHA1a 的哈希值nvarchar

[编辑]:

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

// Computes SHA1 hash of a given string
string ComputeHash(string input)
{
    string result = string.Empty;
    byte[] hash;
    byte[] bytes = Encoding.GetBytes(input);

    using (var sha = SHA1Managed.Create())
        hash = sha.ComputeHash(bytes);

    foreach (var b in hash)
        result += b.ToString("X2");

    return result;
}
4

1 回答 1

6

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

于 2011-03-17T17:39:00.483 回答