Hashing de Contraseñas con BYNCrip: Seguridad y Verificación
Clase 5 de 20 • Curso 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()
retornatrue
si coinciden, ofalse
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!