2010-08-19 12 views
79

¿Hay una manera de generar hash MD5 serie es de tipo varchar (32) sin necesidad de utilizar fn_varbintohexstrGenerar una cadena de hash MD5 con T-SQL

SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', '[email protected]')), 3, 32) 

lo tanto, podría ser utilizado en el interior de una vista con SCHEMABINDING

+0

Véase también https://stackoverflow.com/questions/35200452/compute-md5-hash-of-a-utf8-string/35289890#35289890 – Ben

Respuesta

143
CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2) 
+4

Doesn' t da la respuesta correcta en sql-server-2005 –

+0

¿Cómo se hace esto en SQL2005? No está devolviendo correctamente la secuencia codificada ...? –

+0

@JoshuaRountree, ver mi respuesta en http://stackoverflow.com/questions/3525997/generate-md5-hash-string-with-t-sql/28903685#28903685 – dellasavia

52

uso HashBytes

SELECT HashBytes('MD5', '[email protected]') 

que le dará 0xF53BD08920E5D25809DF2563EF9C52B6

-

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', '[email protected]'),2) 

que le dará F53BD08920E5D25809DF2563EF9C52B6

+1

@Brendan, dejaste el ", 2)" al final. –

+1

@RyanElkins Obtengo el mismo resultado que Brendan, y ciertamente estoy incluido el ", 2)" :( – Matthew

17

Solución:

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32) 
12

Ninguna de las otras respuestas que funcionó para mí. Tenga en cuenta que SQL Server dará resultados diferentes si transfiere una cadena codificada en lugar de alimentarla desde una columna en su conjunto de resultados. A continuación se muestra la magia que trabajó para mí para dar una combinación perfecta entre SQL Server y MySQL

select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ... 
+0

Usar 'LOWER()' solo es necesario si es sensible a mayúsculas y minúsculas. –

9

Para los datos hasta caracteres uso:

CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2) 

Para datos binarios (sin el límite de 8000 bytes) utilizar:

CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@IMG_PATH), 2) 
Cuestiones relacionadas