Вычисление SHA1-хэша строки 'nvarchar' с использованием T-SQL - PullRequest
2 голосов
/ 17 марта 2011

Я пытаюсь вычислить SHA1 хеш строки Unicode, используя T-SQL. Приведенный ниже код отлично работает со строками 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 хеш nvarchar?

[EDIT]:

Ниже кода 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;
}

1 Ответ

6 голосов
/ 17 марта 2011

Вы уверены, что хэш, возвращаемый вашим инструментом, использует UTF16 или кодировку Unicode при сравнении с возвращаемым SQL Server? ... SHA1 (и другие форматы кодирования) зависит от типа данных, так что он должен возвращать разные значения, когда дан в качестве ввода.Взгляните на эту ссылку для более подробного объяснения.

...