Convertire HashBytes a VarChar

voti
102

Voglio ottenere l'hash MD5 di un valore stringa in SQL Server 2005. Lo faccio con il seguente comando:

SELECT HashBytes('MD5', 'HelloWorld')

Tuttavia, questo restituisce un VarBinary invece di un valore VarChar. Se tento di convertire 0x68E109F0F40CA72A15E05CC22786F8E6in un VarChar ricevo há ðô§*à\Â'†øæinvece di 68E109F0F40CA72A15E05CC22786F8E6.

C'è qualche soluzione SQL-based?

È pubblicato 05/08/2008 alle 12:49
fonte dall'utente
In altre lingue...                            


7 risposte

voti
134

Ho trovato la soluzione in cui il resto:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Risposto il 05/08/2008 a 15:26
fonte dall'utente

voti
59
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Risposto il 03/01/2011 a 15:26
fonte dall'utente

voti
29

Utilizzare master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)invece master.dbo.fn_varbintohexstre poi substringingil risultato.

Infatti fn_varbintohexstrchiamate fn_varbintohexsubstringinternamente. Il primo argomento di fn_varbintohexsubstringdice di aggiungere 0xFcome prefisso o meno. fn_varbintohexstrchiamate fn_varbintohexsubstringcon 1il primo argomento internaly.

Poiché non è necessario 0xF, chiamare fn_varbintohexsubstringdirettamente.

Risposto il 17/03/2011 a 17:00
fonte dall'utente

voti
15

Contrariamente a quanto David Knight dice, queste due alternative restituire la stessa risposta 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))

Quindi sembra che il primo è una scelta migliore, a partire dalla versione 2008.

Risposto il 28/08/2014 a 06:35
fonte dall'utente

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

(1 per convertire esadecimale a stringa)

convertire questo per abbassare e rimuovere 0x dall'inizio della stringa da sottostringa:

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

esattamente lo stesso di quello che si ottiene in C # dopo la conversione byte a stringa

Risposto il 07/09/2011 a 08:43
fonte dall'utente

voti
1

Con l'esperienza personale di utilizzare il seguente codice all'interno di una stored procedure, che Hashed una variabile SP posso confermare, anche se non documentata, questa combinazione funziona al 100% come per il mio esempio:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Risposto il 24/02/2015 a 22:54
fonte dall'utente

voti
-3

Cambiare il tipo di dati per varbinary sembra funzionare il meglio per me.

Risposto il 17/02/2010 a 22:31
fonte dall'utente

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