Hashing de Contraseñas con BYNCrip: Seguridad y Verificación

Clase 5 de 20Curso de Backend con Node.js: Autenticación con Passport.js y JWT

Resumen

¿Por qué es necesario encriptar contraseñas?

El hashing de contraseñas es una técnica indispensable cuando se trata de la seguridad de la información en aplicaciones web. No guardar las contraseñas en crudo en tu base de datos es fundamental, ya que permite minimizar riesgos de seguridad. Las contraseñas deben estar encriptadas para protegerlas, incluso de los administradores y cualquier parte del equipo que tenga acceso a la base de datos. En esta guía, aprenderás cómo implementar el hashing de contraseñas de forma eficaz utilizando la librería bcrypt.

¿Cómo funciona el hashing de contraseñas?

Para proteger las contraseñas, no basta con un simple cifrado. El hashing genera una representación única de la contraseña mediante un algoritmo específico. Esto es lo que realmente debemos almacenar en nuestras bases de datos, no la contraseña original. Pero, ¿qué sucede cuando un usuario ingresa de nuevo su contraseña? Necesitamos saber si coincide con el hash almacenado. Veamos cómo realizar todo el proceso.

Implementando el hashing de contraseñas con bcrypt

Instalación de bcrypt

Para comenzar, es crucial contar con la librería bcrypt que nos permitirá realizar el hashing:

npm install bcrypt

Creación del archivo de ejecución

Primero, crea un nuevo archivo llamado passwordHash.js y sigue los pasos a continuación.

Importación y uso de bcrypt

const bcrypt = require('bcrypt');

async function hashPassword() {
  const myPassword = "una_contraseña_segura";
  const saltRounds = 10;
  const hashedPassword = await bcrypt.hash(myPassword, saltRounds);
  
  console.log(hashedPassword);
}

hashPassword();

En este código:

  • Definimos una contraseña a ser encriptada.
  • saltRounds determina cuántas veces se aplica el algoritmo para fortalecer el hash.
  • Usamos bcrypt.hash() que es una función asíncrona para obtener la contraseña encriptada y almacenarla.

Verificación de Contraseñas

Creación del archivo de verificación

Para verificar contraseñas, crea un archivo nuevo llamado passwordVerify.js.

Utilizando bcrypt para verificar

async function verifyPassword() {
  const myPassword = "una_contraseña_segura";
  const hash = "el_hash_de_tu_contraseña"; // Reemplaza con el hash generado previamente
  
  const isMatch = await bcrypt.compare(myPassword, hash);
  console.log(isMatch ? "Contraseña correcta" : "Contraseña incorrecta");
}

verifyPassword();

Con este código:

  • Comparamos la contraseña ingresada por el usuario con el hash almacenado.
  • bcrypt.compare() retorna true si coinciden, o false si no.

Recomendaciones prácticas para la implementación

  • Asegúrate de nunca almacenar contraseñas en crudo.
  • Incrementa la seguridad usando un número elevado de saltRounds, generalmente un valor de 10 es suficiente.
  • Integrar estos mecanismos de seguridad en tu API es crucial para proteger a los usuarios.
  • Realiza pruebas exhaustivas para garantizar que los procesos de hashing y verificación funcionan correctamente.

La correcta implementación de hashing y verificación protegerá la privacidad de tus usuarios, mientras fortalece la seguridad de tu aplicación. ¡Sigue aprendiendo y garantizando la seguridad digital!