Ich möchte den MD5-Hash eines Zeichenfolgenwerts in SQL Server 2005 abrufen. Ich mache dies mit dem folgenden Befehl:
SELECT HashBytes('MD5', 'HelloWorld')
Dies gibt jedoch eine VarBinary anstelle eines VarChar-Werts zurück. Wenn ich versuche, 0x68E109F0F40CA72A15E05CC22786F8E6
in ein VarChar zu konvertieren, bekomme ich há ðô§*à\Â'†øæ
stattdessen 68E109F0F40CA72A15E05CC22786F8E6
.
Gibt es eine SQL-basierte Lösung?
sql
sql-server
GateKiller
quelle
quelle
quelle
Verwenden Sie
master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)
anstelle vonmaster.dbo.fn_varbintohexstr
und dannsubstringing
das Ergebnis.In der Tat
fn_varbintohexstr
Anrufefn_varbintohexsubstring
intern. Das erste Argument vonfn_varbintohexsubstring
sagt, dass es0xF
als Präfix hinzugefügt werden soll oder nicht.fn_varbintohexstr
ruftfn_varbintohexsubstring
mit1
als erstes internes Argument auf.Weil Sie nicht brauchen
0xF
, rufen Siefn_varbintohexsubstring
direkt an.quelle
Im Gegensatz zu David Knight geben diese beiden Alternativen in MS SQL 2008 dieselbe Antwort zurück:
Es sieht also so aus, als wäre der erste ab Version 2008 die bessere Wahl.
quelle
(1 zum Konvertieren von Hexadezimal in Zeichenfolge)
konvertiere dies in niedriger und entferne 0x vom Anfang des Strings durch Teilzeichenfolge:
genau das gleiche wie in C #, nachdem wir Bytes in einen String konvertiert haben
quelle
Aufgrund meiner persönlichen Erfahrung mit der Verwendung des folgenden Codes in einer gespeicherten Prozedur, in der eine SP-Variable gehasht wurde, kann ich bestätigen, dass diese Kombination, obwohl nicht dokumentiert, gemäß meinem Beispiel zu 100% funktioniert:
quelle
Das Ändern des Datentyps in varbinary scheint für mich am besten zu funktionieren.
quelle