Convierta HashBytes a VarChar

votos
102

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 convertirme 0x68E109F0F40CA72A15E05CC22786F8E6en VarChar, obtengo en há ðô§*à\Â'†øælugar de 68E109F0F40CA72A15E05CC22786F8E6.

¿Hay alguna solución basada en SQL?

Publicado el 05/08/2008 a las 12:49
fuente por usuario
En otros idiomas...                            


7 respuestas

votos
134

Encontré la solución en otro lugar donde:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Respondida el 05/08/2008 a las 15:26
fuente por usuario

votos
59
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Respondida el 03/01/2011 a las 15:26
fuente por usuario

votos
29

Utilizar master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)en lugar de master.dbo.fn_varbintohexstry luego substringingel resultado.

De hecho fn_varbintohexstrllamadas fn_varbintohexsubstringinternamente. El primer argumento de la fn_varbintohexsubstringcuenta para añadir 0xFcomo prefijo o no. fn_varbintohexstrllamadas fn_varbintohexsubstringcon 1como primer argumento internaly.

Debido a que no es necesario 0xF, llamar fn_varbintohexsubstringdirectamente.

Respondida el 17/03/2011 a las 17:00
fuente por usuario

votos
15

Contrariamente a lo que David Knight dice, estas dos alternativas vuelven 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))

Así que parece que la primera es una mejor opción, a partir de la versión 2008.

Respondida el 28/08/2014 a las 06:35
fuente por usuario

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

(1 para la conversión de hexadecimal a string)

convertir esto a disminuir y eliminar 0x desde el inicio de la cadena por subcadena:

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

exactamente lo mismo que lo que tenemos en C # después de la conversión de bytes a cadena

Respondida el 07/09/2011 a las 08:43
fuente por usuario

votos
1

Con la experiencia personal de usar el siguiente código dentro de un procedimiento almacenado, que HASHED una variable SP puedo confirmar, aunque no documentada, esta combinación funciona al 100% de acuerdo con mi ejemplo:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Respondida el 24/02/2015 a las 22:54
fuente por usuario

votos
-3

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

Respondida el 17/02/2010 a las 22:31
fuente por usuario

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