Хеширование более 8000 байт в SQL Server - PullRequest
7 голосов
/ 14 октября 2011

Функция хеширования SQL Server HASHBYTES имеет ограничение ввода 8000 байт.

Как вы хешируете строки большего размера?

Ответы [ 3 ]

9 голосов
/ 17 февраля 2012

Вы могли бы написать функцию SQL CLR:

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBinary BigHashBytes(SqlString algorithm, SqlString data)
{
    var algo = HashAlgorithm.Create(algorithm.Value);

    var bytes = Encoding.UTF8.GetBytes(data.Value);

    return new SqlBinary(algo.ComputeHash(bytes));
}

И затем ее можно вызывать в SQL следующим образом:

--these return the same value
select HASHBYTES('md5', 'test stuff')
select dbo.BigHashBytes('md5', 'test stuff')

BigHashBytes необходимо только в том случае, если длинабудет более 8 тыс.

5 голосов
/ 14 октября 2011

Вы можете хешировать 8k (или 4k или 2k) порций ввода, а затем либо объединить эти хэши, либо хэшировать их в новое значение хэша.Это может оказаться затруднительным, если вам придется создать аналогичный алгоритм (например, во внешнем приложении .NET) для сравнения хэшей, созданных вне SQL Server.

Другой вариант: использовать интеграцию SQL Server CLR и выполните хеширование в сборке .NET.

2 голосов
/ 14 октября 2011

Как и идея Пола, одна идея, которая приходит на ум при чанкинге, состоит в том, чтобы сохранить хешированную строку в столбце XML, причем каждый кусок является отдельным элементом XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...