Compute MD5-Hash eines UTF8-Strings

Ich habe eine SQL-Tabelle, in der ich große Zeichenfolgenwerte speichere, die eindeutig sein müssen. Um die Eindeutigkeit sicherzustellen, habe ich einen eindeutigen Index für eine Spalte, in der ich eine Zeichenfolgendarstellung des MD5-Hash der großen Zeichenfolge speichere.

Die C # -App, die diese Datensätze speichert, verwendet die folgende Methode, um das Hashing durchzuführen:

public static string CreateMd5HashString(byte[] input)
{
    var hashBytes = MD5.Create().ComputeHash(input);
    return string.Join("", hashBytes.Select(b => b.ToString("X")));
}

Um dies aufzurufen, konvertiere ich zuerst dasstring zubyte[] mit der UTF-8-Codierung:

// this is what I use in my app
CreateMd5HashString(Encoding.UTF8.GetBytes("abc"))
// result: 90150983CD24FB0D6963F7D28E17F72

Now Ich möchte in der Lage sein, diese Hashing-Funktion in SQL zu implementieren, mit demHASHBYTES function, aber ich bekomme einen anderen Wert:

print hashbytes('md5', N'abc')
-- result: 0xCE1473CF80C6B3FDA8E3DFC006ADC315

Dies liegt daran, dass SQL das MD5 der UTF-16-Darstellung der Zeichenfolge berechnet. Ich erhalte das gleiche Ergebnis in C #, wenn ichCreateMd5HashString(Encoding.Unicode.GetBytes("abc")).

Ich kann die Art und Weise, wie das Hashing in der Anwendung durchgeführt wird, nicht ändern.

Gibt es eine Möglichkeit, mit SQL Server den MD5-Hash der UTF-8-Bytes der Zeichenfolge zu berechnen?

Ich habe ähnliche Fragen nachgeschlagen, ich habe versucht, Kollatierungen zu verwenden, hatte aber bisher kein Glück.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage