Frage

Ich möchte den MD5-Hash einer Zeichenfolge in SQL Server 2005.Ich mache das mit dem folgenden Befehl:

SELECT HashBytes('MD5', 'HelloWorld')

Allerdings, dies gibt einen VarBinary anstelle von VarChar-Wert.Wenn ich versuche zu konvertieren 0x68E109F0F40CA72A15E05CC22786F8E6 in einer VarChar-ich bekommen há ðô§*à\Â'†øæ statt 68E109F0F40CA72A15E05CC22786F8E6.

Gibt es eine SQL-basierte Lösung?

Ja

War es hilfreich?

Lösung

Ich habe die Lösung gefunden, wo sonst:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)

Andere Tipps

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)

Verwenden master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0) statt master.dbo.fn_varbintohexstr und dann substringing das Ergebnis.

In der Tat fn_varbintohexstr Aufrufe fn_varbintohexsubstring intern.Das erste argument von fn_varbintohexsubstring es erzählt hinzufügen 0xF als Präfix oder nicht. fn_varbintohexstr Aufrufe fn_varbintohexsubstring mit 1 als erstes argument intern.

Da brauchen Sie nicht 0xF, rufen Sie fn_varbintohexsubstring direkt.

Im Gegensatz zu dem, was David Knight sagt, diese beiden alternativen Rückkehr die gleiche Antwort in MS SQL 2008:

SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'Hello World'),2)
SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('MD5', 'Hello World'), 1, 0))

So wie es aussieht die erste ist eine bessere Wahl, ab der version 2008.

convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(1 für die Umwandlung von hexadezimal-string)

konvertieren diesen zu senken und entfernen 0x vom Anfang der Zeichenfolge Teilzeichenfolge:

substring(lower(convert(varchar(34), HASHBYTES('MD5','Hello World'),1)),3,32)

genau das gleiche wie das, was wir erhalten, in C# nach der Konvertierung von Byte zu string

Mit persönlichen Erfahrungen von den folgenden code in einer Gespeicherten Prozedur, die eine Hash-SP-Variable, die ich bestätigen kann, obwohl nicht dokumentiert, diese Kombination funktioniert zu 100% wie pro mein Beispiel:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)

Ändern Sie den Datentyp varbinary scheint zu funktionieren am besten für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top