Nunca he sido muy amigo del motor de base de datos de microsoft.. MS SQL Server no es mi opción a elegir, pero la mayoría de las veces que trabajamos con la plataforma de .NET es casi un requisito forzoso tener que utilizarlo.
En este artículo escribiré un poco sobre como utilizar los métodos para encriptar cadenas utilizando MD5, SHA o SHA1 .. la verdad es que comparado con los otros motores de BD que conozco.. MS SQL Server es uno de los más feos para aplicar.. pero igualmente funcional.
Entonces el ejemplo para complementar de lo que hablo, va de la siguiente manera:
SELECT HashBytes('MD5','qbit.com.mx') SELECT HashBytes('SHA','qbit.com.mx') SELECT HashBytes('SHA1','qbit.com.mx') |
Ahora, el problema común de utilizar este método es que retorna un tipo de dato VarBinary en lugar de VarChar por lo que para obtener la cadena correcta se necesita hacer una substracción de la parte que nos interesa.. y ello implica utilizar la función SUBSTRING…
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'qbit.com.mx'), 3, 32) AS MD5 SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA', 'qbit.com.mx'), 3, 40) AS SHA SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA1', 'qbit.com.mx'), 3, 40) AS SHA1 |
Como verán si utilizo solamente la conversión SUBSTRING(HashBytes(‘MD5′,’qbit.com.mx’), 3,32) no extrae la cadena necesaria de forma correcta.. y es por esa razón que se necesita utilizar master.dbo.fn_varbintohexstr() .. para mi inquietud la función varbintohexstr no esta documentada así es que no estoy seguro del porque usarla 🙁
Estas funciones las he probado en el motor 9 de SQL Server .. en un par de días más lo estaré probando con versiones recientes y actualizaré este artículo..
Gracias, muy util
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes(‘SHA1’, ‘qbit.com.mx’), 3, 40) AS SHA1
Te faltó cerrar un paréntesis…
fue adrede solo para probar que revisen el código.. gracias!!
fuerte subnormal. Pon el código bien zumbado
Gracias por la información!
“fue adrede solo para probar que revisen el código.. gracias!!” jajaja que mamón!
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes(‘MD5’, ‘qbit.com.mx’)), 3, 32) AS MD5
fue adrede solo para probar que revisen el código.. gracias!!
“fue adrede solo para probar que revisen el código.. gracias!!” jajaja que mamón!
Y bn mamo 😛
Estupendo, os dejo una web que realiza la codificación MD5 online directamente desde el navegador, muy útil para no tener que codificar una cadena y tener que picar un php para ello.
— The MD2, MD4, MD5, SHA, and SHA1 algorithms are not available under compatibility level 130 and above. Use SHA2_256 or SHA2_512 instead.
— If you want a quoted string to be NVARCHAR (treated as Unicode), you need to prefix it with N
declare @hash nvarchar(MAX)
set @hash = ‘123456’
SET @hash = ‘password5baa61e4c9b93f3f0682250b6’
SELECT HASHBYTES(‘SHA1′, N’password5baa61e4c9b93f3f0682250b6’) AS NVARCHAR_INPUT,
HASHBYTES(‘SHA1’, @hash) AS VARIABLE_INPUT
–**************************************************************************
SELECT HASHBYTES(‘MD5’, @hash ) as ‘MD5’
, HASHBYTES(‘SHA1’, @hash ) as ‘SHA1’
, HASHBYTES(‘SHA2_256 ‘, @hash ) as ‘SHA256 ‘
, HASHBYTES(‘SHA2_512 ‘, @hash ) as ‘SHA512 ‘
, HASHBYTES(‘MD4’, @hash ) as ‘MD4’
SELECT lower(convert(varchar(200), HASHBYTES(‘MD5’, @hash ),1)) as ‘MD5’
, lower(convert(varchar(200),HASHBYTES(‘SHA1’, @hash ),1)) as ‘SHA1’
, lower(convert(varchar(200),HASHBYTES(‘SHA2_256 ‘, @hash ),1)) as ‘SHA256’
, lower(convert(varchar(200),HASHBYTES(‘SHA2_512 ‘, @hash ),1)) as ‘SHA512’
, lower(convert(varchar(200),HASHBYTES(‘MD4 ‘, @hash ),1)) as ‘MD4’
Aquí voy hacer una aclaratoria, el MD5, SHA1, SHA256 no son métodos de encriptación, son métodos de reducción criptográfico, es decir, es como sería su huella dactilar en el mundo informático. Un archivo por ejemplo TRABAJO.DOC tiene una huella dactilar única en China, Pekín o en Marte si gustan y OJO no es por el nombre del archivo es el contenido que lo hace único. Para ENCRIPTAR o CIFRAR datos en SQL Server se usa EncryptByPassPhrase(‘clave’, ‘datos’) prueben y revisen. Cabe destacar que el resultado enviado por MD5, SHA1, SHA256 son llamados HASH. Saludos.
PD:
Tómese este comentario crítica CONSTRUCTIVA. No DESTRUCTIVA.