Introducción
Hace algunos años, cuando estaba en la universidad, trabajé en un proyecto con PHP donde llegué a uno de los puntos más importantes en cualquier sistema: el login de usuarios. Fue ahí donde aprendí la importancia de no guardar contraseñas en texto plano dentro de la base de datos, sino aplicar mecanismos de seguridad para proteger la información.

En ese entonces utilizaba funciones como password_hash y password_verify, que permiten encriptar y validar contraseñas de forma segura.
Hoy en día, trabajando con Node.js y TypeScript, utilizo una librería muy conocida que cumple el mismo propósito: bcrypt.
En este artículo te explicaré qué es, cómo funciona y por qué es fundamental en cualquier aplicación moderna.
Contenido
¿Qué es la encriptación de contraseñas?
Aunque comúnmente se le llama “encriptación”, en realidad lo correcto es hablar de hashing de contraseñas.
El hashing es un proceso mediante el cual una contraseña se transforma en una cadena irreconocible mediante un algoritmo matemático. Este proceso es:
- Unidireccional (no se puede revertir fácilmente)
- Determinístico (misma entrada → mismo resultado, con variaciones por seguridad)
- Seguro frente a ataques comunes
Esto significa que, aunque alguien tenga acceso a la base de datos, no podrá ver las contraseñas reales de los usuarios.
Ventajas de proteger las contraseñas
Implementar hashing en contraseñas trae múltiples beneficios:
- 🔐 Protege la información sensible de los usuarios
- 🛡️ Reduce el impacto de filtraciones de datos
- 📉 Disminuye riesgos de accesos no autorizados
- ✅ Es una buena práctica estándar en desarrollo
- 🌍 Genera confianza en los usuarios
Riesgos de guardar contraseñas sin protección
Uno de los errores más graves que he visto en algunos proyectos es almacenar contraseñas en texto plano.
Esto puede provocar:
- Acceso total a cuentas si la base de datos es comprometida
- Robo de información sensible
- Uso de credenciales en otros servicios (por malas prácticas de los usuarios)
- Problemas legales o reputacionales
Muchos usuarios reutilizan contraseñas, por lo que una filtración puede afectar múltiples plataformas al mismo tiempo.
¿Cómo lo hacía antes en PHP?
En PHP, el proceso era bastante sencillo gracias a funciones integradas.
Para guardar una contraseña:
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);Esto generaba un hash seguro que se almacenaba en la base de datos.
Luego, para validar en el login:
$hashCheck = password_verify($password, $userData['accountPassword']);Esto devolvía un valor booleano indicando si la contraseña era correcta o no.
¿Qué es bcrypt?
bcrypt es una librería utilizada para el hashing de contraseñas. Está diseñada específicamente para ser segura y resistente a ataques de fuerza bruta.
Una de sus características principales es que utiliza un concepto llamado salt, que añade un valor aleatorio a cada contraseña antes de generar el hash. Esto evita que dos contraseñas iguales tengan el mismo resultado.
Además, permite configurar un nivel de complejidad (cost factor), lo que hace que el proceso de hashing sea más lento y seguro.

¿Cómo instalar bcrypt en Node.js?
Para usar bcrypt en un proyecto de Node.js, puedes instalarlo con:
npm install bcryptjsTambién puedes usar la versión nativa bcrypt, pero bcryptjs es más simple de manejar en muchos casos.
¿Cómo usar bcrypt?
A continuación, un ejemplo práctico en TypeScript:
import * as bcrypt from 'bcryptjs';
async function hashPassword(passwordToHash: string, security: number = 12): Promise<string> {
const hashedPassword = await bcrypt.hash(passwordToHash, security);
return hashedPassword;
}
async function verifyPassword(dataBasePassword: string, passwordToCheck: string): Promise<boolean> {
return await bcrypt.compare(passwordToCheck, dataBasePassword);
}¿Qué hace este código?
hashPassword: convierte una contraseña en un hash seguroverifyPassword: compara una contraseña ingresada con el hash almacenado
Esto permite implementar fácilmente un sistema de autenticación seguro.
Riesgos a tomar en cuenta
Aunque usar bcrypt es una excelente práctica, hay ciertos puntos importantes que debes considerar:
- No usar un nivel de seguridad demasiado bajo
- No almacenar contraseñas sin hash bajo ninguna circunstancia
- Proteger también la base de datos
- Implementar buenas prácticas adicionales (JWT, sesiones seguras, etc.)
En mi experiencia como desarrollador, es preocupante ver proyectos donde las contraseñas se almacenan en texto plano. Esto representa un riesgo enorme, especialmente considerando que muchos usuarios reutilizan sus credenciales.
Conclusión
El uso de herramientas como bcrypt es esencial en el desarrollo de aplicaciones modernas. Proteger las contraseñas de los usuarios no es opcional, es una responsabilidad básica de cualquier desarrollador.
Si vienes de trabajar con PHP, la transición hacia Node.js será bastante sencilla, ya que los conceptos son muy similares. Lo importante es entender la lógica detrás del hashing y aplicarla correctamente.
En mi experiencia, implementar este tipo de seguridad desde el inicio puede evitar muchos problemas en el futuro y te permitirá construir aplicaciones más confiables y profesionales.
Sobre el Autor:

Marco Antonio Bustillos Quiroz
Bachelor of Science in Web Design and Development (BYU-Idaho)
Full Stack Web Developer con más de 8 años de experiencia en desarrollo Front End y Back End. Mis proyectos incluyen sitios web, landing pages, aplicaciones web, REST APIs, e-commerce, y mucho más. Mi pasión es crear experiencias digitales impactantes y compartir conocimientos con otros desarrolladores.