Вычислить хеш MD5 строки UTF8
У меня есть таблица SQL, в которой я храню большие строковые значения, которые должны быть уникальными. Чтобы обеспечить уникальность, у меня есть уникальный индекс для столбца, в котором я храню строковое представление хеша MD5 большой строки.
Приложение C #, которое сохраняет эти записи, использует следующий метод для хеширования:
public static string CreateMd5HashString(byte[] input)
{
var hashBytes = MD5.Create().ComputeHash(input);
return string.Join("", hashBytes.Select(b => b.ToString("X")));
}
Чтобы вызвать это, я сначала конвертируюstring
вbyte[]
используя кодировку UTF-8:
// this is what I use in my app
CreateMd5HashString(Encoding.UTF8.GetBytes("abc"))
// result: 90150983CD24FB0D6963F7D28E17F72
Теперь я хотел бы иметь возможность реализовать эту функцию хеширования в SQL, используяHASHBYTES
функция, но я получаю другое значение:
print hashbytes('md5', N'abc')
-- result: 0xCE1473CF80C6B3FDA8E3DFC006ADC315
Это связано с тем, что SQL вычисляет MD5 представления строки UTF-16. Я получаю тот же результат в C #, если я делаюCreateMd5HashString(Encoding.Unicode.GetBytes("abc"))
.
Я не могу изменить способ хэширования в приложении.
Есть ли способ заставить SQL Server вычислять хеш MD5 байтов строки UTF-8?
Я искал похожие вопросы, пытался использовать сопоставления, но пока не повезло.