Cómo generar un hash y descifrar con MD5 en JavaScript
() translation by (you can also view the original English article)
En este artículo, discutiremos cómo puedes usar JavaScript para generar el hash MD5 de una cadena, agregarle sal, validarlo y descifrarlo.
JavaScript es una de las tecnologías centrales de la web. La mayoría de los sitios web la utilizan, y todos los navegadores web modernos son compatibles con ella sin necesidad de complementos. En esta serie, discutiremos diferentes trucos y consejos que te ayudarán en tu desarrollo cotidiano con JavaScript.
Como desarrollador de JavaScript, a veces necesitas convertir una cadena en un hash MD5. Existen muchas bibliotecas de código abierto que te permiten hacer esto en tus proyectos de JavaScript. Algunas de ellas están disponibles como paquetes NPM, y hay algunas otras que puedes usar como bibliotecas de JavaScript independientes simplemente incluyéndolas en tus páginas HTML. En este artículo, exploraremos un par de populares bibliotecas JavaScript MD5 para comprender cómo puedes usarlas en tus proyectos.
También discutiremos cómo puedes descifrar un hash MD5 en JavaScript. Aunque en teoría no es posible descifrar un hash MD5 para obtener la cadena original, en ocasiones puedes lograrlo con la ayuda de servicios de búsqueda. Por supuesto, no hay garantía de que esto funcione en todos los casos. Solamente podrás descifrar palabras que ya estén almacenadas en las bases de datos de búsqueda. Sin embargo, estas son bases de datos gigantes que contienen más de mil millones de códigos hash, por lo que existen una gran posibilidad de que contengan las palabras y combinaciones de símbolos más comunes.
Cómo generar un hash MD5 en JavaScript
En esta sección, exploraremos algunas bibliotecas que te permiten generar códigos hash MD5.
Comenzaremos con una de las bibliotecas más populares: blueimp/JavaScript-MD5. Es realmente sencillo integrar la biblioteca blueimp/JavaScript-MD5 en tus proyectos, ya que solamente necesitas incluir el archivo JavaScript de origen en una etiqueta script
. También es compatible con entornos del lado del servidor como Node.js. Además de eso, es compatible con cargadores de módulos también, como RequireJS y Webpack, y funciona en todos los principales navegadores web.
Ya que es compatible con Node.js, puedes instalarla rápidamente con NPM, como se muestra en el siguiente fragmento de código.
1 |
npm install blueimp-md5 |
Si no estás utilizando NPM en tus proyectos, en lugar de hacer lo anterior puedes descargar el archivo fuente de GitHub.
Para comenzar a utilizarla en tus proyectos, solamente necesitas incluir el siguiente fragmento de código en la sección <head>
de tus páginas HTML.
1 |
<script src="js/md5.min.js"></script> |
Una vez que hayas incluido el archivo md5.min.js en tus proyectos, ¡estás listo para usar las funciones que ofrece esta biblioteca! Revisemos el siguiente ejemplo para ver cómo puedes utilizarla para crear códigos hash MD5.
1 |
<script type="text/javascript" src="md5.min.js"></script> |
2 |
<script>
|
3 |
window.addEventListener('load', function() { |
4 |
var strHash = md5('tutsplus'); |
5 |
alert('The MD5 hash of the tutsplus string is:' + strHash); |
6 |
});
|
7 |
</script>
|
Como puedes ver, utilizarla es bastante sencillo. La biblioteca blueimp/JavaScript-MD5 proporciona la función md5
que puedes usar para generar códigos hash MD5.
A continuación, veremos otra biblioteca que también es una manera rápida de generar códigos hash MD5. Puedes descargarla desde el sitio web de los creadores. Una vez que la hayas descargado, puedes usarla como se muestra en el siguiente fragmento de código.
1 |
<script type="text/javascript" src="md5.js"></script> |
2 |
<script>
|
3 |
window.addEventListener('load', function() { |
4 |
var strHash = md5('tutsplus'); |
5 |
alert('The MD5 hash of the tutsplus string is:' + strHash); |
6 |
});
|
7 |
</script>
|
Así es como se generan los códigos hash MD5 en JavaScript. En la siguiente sección, exploraremos cómo puedes descifrar los hash MD5 en JavaScript.
Cómo descifrar un hash MD5 en JavaScript
En primer lugar, debemos comprender que no existe una forma nativa de descifrar códigos hash MD5 en JavaScript. Dado que el hash MD5 es un algoritmo unidireccional, en teoría no es posible revertir los hash MD5. Hay un par de métodos alternativos que puedes usar para descifrarlos, pero no son infalibles, por lo que no hay garantía de que siempre funcionen.
Una característica que hace posible descifrar códigos hash en ocasiones es que el algoritmo MD5 siempre genera el mismo resultado para una cadena. Por lo tanto, si tienes una base de datos que contiene el mapeo de todas las palabras populares, puedes usarla como un servicio de búsqueda (a veces llamada tabla arcoíris) para encontrar la cadena original del hash MD5. Si la cadena que generó el hash se encuentra en la base de datos, podrás encontrarla simplemente proporcionando el hash.
Esta es la razón por la que un sistema de inicio de sesión seguro siempre "agregará sal" a las contraseñas. Esto significa que agregará algunos caracteres adicionales a la cadena a la que se le aplicará el hash, por ejemplo algo como la hora actual en milisegundos o una cadena aleatoria de 32 caracteres. De esa manera, la cadena tendrá un elemento impredecible y no se encontrará en la tabla arcoíris.
Cómo validar un hash MD5 en JavaScript
Si solamente quieres verificar si el hash de una cadena es correcto, este es un procedimiento sencillo. Simplemente aplica hash a la cadena con el algoritmo MD5 y comprueba si coincide con el código hash que estés probando. Si el resultado del algoritmo coincide con el código hash que estés probando, tienes concordancia y el código hash original es válido.
SI estás validando un hash con sal para un sistema de inicio de sesión, necesitarás incluir la cadena usada como sal. Normalmente, la cadena usada como sal se almacena junto con el nombre de usuario y la contraseña codificada con hash dentro de la tabla de la base de datos empleada para el sistema de inicio de sesión. De esa manera, puedes combinar fácilmente la sal con cualquier contraseña que el usuario escriba para iniciar sesión y comparar el hash resultante con el que se encuentra en la base de datos.
Conclusión
Hoy discutimos cómo puedes convertir cadenas a códigos hash MD5 en JavaScript. Aunque en teoría es imposible descifrar códigos hash MD5, dado que el hash es un algoritmo unidireccional discutimos cómo puedes intentar descifrar los hash MD5 con la ayuda de API externas.