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.