Konvertieren HashBytes VarChar

stimmen
102

Ich möchte den MD5-Hash eines String-Wert in SQL Server erhalten 2005. Ich tue dies mit dem folgenden Befehl:

SELECT HashBytes('MD5', 'HelloWorld')

Allerdings gibt diese eine VarBinary anstelle eines VarChar Wert. Wenn ich zu konvertieren versuchen , 0x68E109F0F40CA72A15E05CC22786F8E6in eine VarChar bekomme ich há ðô§*à\Â'†øæstatt 68E109F0F40CA72A15E05CC22786F8E6.

Gibt es eine SQL-basierte Lösung?

Ja

Veröffentlicht am 05/08/2008 um 12:49
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
134

Ich habe die Lösung anders gefunden, wo:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Beantwortet am 05/08/2008 um 15:26
quelle vom benutzer

stimmen
59
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Beantwortet am 03/01/2011 um 15:26
quelle vom benutzer

stimmen
29

Verwenden Sie master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)statt master.dbo.fn_varbintohexstrund dann substringingdas Ergebnis.

In der Tat fn_varbintohexstrruft fn_varbintohexsubstringintern. Das erste Argument fn_varbintohexsubstringsagt es hinzuzufügen 0xFals Präfix oder nicht. fn_varbintohexstrAnrufe fn_varbintohexsubstringmit 1internaly als erstes Argument.

Weil Sie nicht brauchen 0xF, rufen Sie fn_varbintohexsubstringdirekt an .

Beantwortet am 17/03/2011 um 17:00
quelle vom benutzer

stimmen
15

Im Gegensatz zu dem, was David Knight sagt, geben diese beiden Alternativen 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 sieht es aus wie die erste eine bessere Wahl ist, ab Version 2008.

Beantwortet am 28/08/2014 um 06:35
quelle vom benutzer

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

(1 für die Umwandlung von hexadezimal string)

wandeln diese 0x vom Anfang des Strings von Teilzeichenfolge zu senken und zu entfernen:

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

genau das gleiche wie das, was wir in C # erhalten, nachdem Bytes in String konvertieren

Beantwortet am 07/09/2011 um 08:43
quelle vom benutzer

stimmen
1

Mit eigener Erfahrung von dem folgenden Code innerhalb einer gespeicherten Prozedur verwendet, die eine SP Variable Gehashte ich bestätigen kann, obwohl nicht dokumentiert, diese Kombination aus 100% als je mein Beispiel funktioniert:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Beantwortet am 24/02/2015 um 22:54
quelle vom benutzer

stimmen
-3

Ändern des Datentyps zu varbinary scheint für mich, die am besten zu funktionieren.

Beantwortet am 17/02/2010 um 22:31
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more