sql - Konvertieren Sie HashBytes in VarChar

Translate

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 zu konvertieren0x68E109F0F40CA72A15E05CC22786F8E6in ein VarChar bekomme ichhá ðô§*à\Â'†øæAnstatt von68E109F0F40CA72A15E05CC22786F8E6.

Gibt es eine SQL-basierte Lösung?

Ja

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Ich habe die Lösung woanders gefunden:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Quelle
Translate
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Quelle
Translate

Verwendenmaster.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)Anstatt vonmaster.dbo.fn_varbintohexstrund dannsubstringingdas Ergebnis.

Eigentlichfn_varbintohexstrAnrufefn_varbintohexsubstringim Inneren. Das erste Argument vonfn_varbintohexsubstringsagt es hinzuzufügen0xFals Präfix oder nicht.fn_varbintohexstrAnrufefn_varbintohexsubstringmit1als erstes internes Argument.

Weil du nicht brauchst0xF, Anruffn_varbintohexsubstringdirekt.

Quelle
Translate

Im Gegensatz zu wasDavid KnightDiese beiden Alternativen geben in MS SQL 2008 dieselbe Antwort zurück:

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

Es sieht also so aus, als wäre der erste ab Version 2008 die bessere Wahl.

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

(1 zum Konvertieren von Hexadezimal in Zeichenfolge)

konvertieren Sie dies in niedriger und entfernen Sie 0x vom Anfang des Strings durch Teilzeichenfolge:

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

genau das gleiche wie das, was wir in C # erhalten, nachdem wir Bytes in einen String konvertiert haben

Quelle
Translate

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:

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

Das Ändern des Datentyps in varbinary scheint für mich am besten zu funktionieren.

Quelle