hashbytes decrypt sql sql-server

decrypt - sql server reverse md5 hash



Convierta HashBytes a VarChar (7)

Quiero obtener el hash MD5 de un valor de cadena en SQL Server 2005. Lo hago con el siguiente comando:

SELECT HashBytes(''MD5'', ''HelloWorld'')

Sin embargo, esto devuelve un VarBinary en lugar de un valor VarChar. Si intento convertir 0x68E109F0F40CA72A15E05CC22786F8E6 en VarChar, obtengo há ðô§*à/Â''†øæ lugar de 68E109F0F40CA72A15E05CC22786F8E6 .

¿Hay alguna solución basada en SQL?

Yes


Al contrario de lo que dice David Knight , estas dos alternativas devuelven la misma respuesta en 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))

Por lo tanto, parece que la primera es una mejor opción, a partir de la versión 2008.


Cambiar el tipo de datos a varbinary parece funcionar mejor para mí.


Con la experiencia personal de usar el siguiente código dentro de un Procedimiento almacenado que tiene una variable SP hasheada, puedo confirmar, aunque no documentado, que esta combinación funciona al 100% según mi ejemplo:

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


Encontré la solución en otro lugar donde:

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


Utilice master.dbo.fn_varbintohexsubstring(0, HashBytes(''SHA1'', @input), 1, 0) lugar de master.dbo.fn_varbintohexstr y luego substringing el resultado.

De hecho, fn_varbintohexstr llama fn_varbintohexsubstring internamente. El primer argumento de fn_varbintohexsubstring le dice que agregue 0xF como el prefijo o no. fn_varbintohexstr llama a fn_varbintohexsubstring con 1 como primer argumento internaly.

Como no necesita 0xF , llame fn_varbintohexsubstring directamente.


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


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

(1 para convertir hexadecimal a cadena)

conviértalo a más bajo y elimine 0x del comienzo de la cadena por subcadena:

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

exactamente lo mismo que lo que obtenemos en C # después de convertir bytes en cadena