Calcular o hash MD5 de uma sequência UTF8
Eu tenho uma tabela SQL na qual armazeno valores grandes de string que devem ser exclusivos. Para garantir a exclusividade, tenho um índice exclusivo em uma coluna na qual armazeno uma representação de string do hash MD5 da string grande.
O aplicativo C # que salva esses registros usa o seguinte método para fazer o hash:
public static string CreateMd5HashString(byte[] input)
{
var hashBytes = MD5.Create().ComputeHash(input);
return string.Join("", hashBytes.Select(b => b.ToString("X")));
}
Para chamar isso, primeiro converto ostring
parabyte[]
usando a codificação UTF-8:
// this is what I use in my app
CreateMd5HashString(Encoding.UTF8.GetBytes("abc"))
// result: 90150983CD24FB0D6963F7D28E17F72
Agora eu gostaria de poder implementar essa função de hash no SQL, usando oHASHBYTES
função, mas recebo um valor diferente:
print hashbytes('md5', N'abc')
-- result: 0xCE1473CF80C6B3FDA8E3DFC006ADC315
Isso ocorre porque o SQL calcula o MD5 da representação UTF-16 da sequência. Eu obtenho o mesmo resultado em c # se eu fizerCreateMd5HashString(Encoding.Unicode.GetBytes("abc"))
.
Não consigo alterar a maneira como o hash é feito no aplicativo.
Existe uma maneira de obter o SQL Server para calcular o hash MD5 dos bytes UTF-8 da seqüência de caracteres?
Procurei perguntas semelhantes, tentei usar agrupamentos, mas até agora não tive sorte.