Bcrypt

img

¿Qué es Bcrypt?

Bcrypt es una función de hashing diseñada para proteger contraseñas de manera segura.
Se diferencia de otros algoritmos como MD5 o SHA-1 porque:

1. ¿Para qué se usa?

Bcrypt se utiliza principalmente para:

Se aplica mejor en:

2. ¿Qué puedo construir con Bcrypt?

Con Bcrypt puedes implementar:

3. ¿Cuándo es más conveniente usarlo?

Es recomendable usar Bcrypt cuando:

Comparado con otras opciones:

Buenas prácticas recomendadas


Resumen rápido

✅ Fortalezas principales:

⚠️ Debilidades principales:

🛠️ Cuándo usarlo:

🚫 Cuándo evitarlo:


Temas


Conceptos relacionados

Antes de usar Bcrypt, es importante conocer algunos conceptos clave que se relacionan directamente con su funcionamiento:

Hashing

Proceso unidireccional que convierte un dato en una cadena de longitud fija. A diferencia de la encriptación, no se puede revertir al valor original.

Salt

Valor aleatorio que se añade a la contraseña antes de generar el hash. Esto garantiza que dos contraseñas iguales no produzcan el mismo hash.

Salt Rounds (factor de costo)

Número de veces que Bcrypt aplica el proceso de hashing. A mayor número, más seguro, pero también más lento el cálculo.

Comparación de hashes

Proceso que permite verificar si una contraseña ingresada corresponde al hash almacenado.

Fuerza bruta

Método de ataque donde un sistema prueba múltiples combinaciones posibles hasta encontrar la contraseña correcta. Bcrypt ayuda a mitigarlo al ser computacionalmente costoso.

🔼 temas


Herramientas recomendadas

1. Node.js con la librería bcrypt

npm install bcrypt
const bcrypt = require("bcrypt");
const hash = await bcrypt.hash("miClave123", 10);

2. Librería bcryptjs (alternativa en JavaScript)

npm install bcryptjs
const bcrypt = require("bcryptjs");
const hash = await bcrypt.hash("miClave123", 10);

🔼 temas


Snippets rápidos

Fragmentos de código que puedes reutilizar frecuentemente con Bcrypt:

Importar librería

const bcrypt = require("bcrypt");

Generar hash

const hash = await bcrypt.hash("miClave123", 10);

Comparar contraseña

const isMatch = await bcrypt.compare("miClave123", hash);

Generar salt manualmente

const salt = await bcrypt.genSalt(12);
const hash = await bcrypt.hash("otraClave456", salt);

Verificar coincidencia

if (await bcrypt.compare("otraClave456", hash)) {
  console.log("✅ Coinciden");
} else {
  console.log("❌ No coinciden");
}

🔼 temas


Comandos

1. Generar hash con número de salt rounds

const hash = await bcrypt.hash("password", 10);

2. Generar salt y luego el hash

const salt = await bcrypt.genSalt(12);
const hash = await bcrypt.hash("password", salt);

3. Comparar contraseña con hash almacenado

const isMatch = await bcrypt.compare("password", hash);

Devuelve true si coinciden, false si no.

4. Versión síncrona (bloqueante, solo si es necesario)

const hash = bcrypt.hashSync("password", 10);
const isMatch = bcrypt.compareSync("password", hash);

Útil en scripts pequeños o sin operaciones asíncronas.

🔼 temas


Conceptos Claves

🟢 Básico

1. ¿Qué es Bcrypt y para qué se utiliza?

Bcrypt es una función de hashing diseñada específicamente para proteger contraseñas. Se utiliza en aplicaciones web, móviles y sistemas que requieren almacenamiento seguro de credenciales.

2. ¿Cuál es la diferencia entre hashing y encriptación?

3. ¿Qué son los "salt rounds" en Bcrypt?

Son el número de iteraciones que el algoritmo aplica al hash. A mayor número, mayor seguridad, pero también más consumo de recursos y tiempo de procesamiento.

4. ¿Por qué es importante usar un "salt" en el hash?

El salt evita que contraseñas iguales produzcan el mismo hash, lo que protege contra ataques con tablas rainbow.

5. ¿Cómo se genera un hash básico con Bcrypt en Node.js?

const bcrypt = require("bcrypt");
const hash = await bcrypt.hash("password123", 10);

🟡 Intermedio

6. ¿Cómo se compara una contraseña con su hash en Bcrypt?

const isMatch = await bcrypt.compare("password123", hash);

Retorna true si coinciden, false en caso contrario.

7. ¿Qué pasa si se usan muy pocos salt rounds (ej. 1 o 2)?

El proceso de hashing se vuelve muy rápido y fácil de romper con ataques de fuerza bruta.

8. ¿Qué pasa si se usan demasiados salt rounds (ej. 20+)?

El hash se vuelve extremadamente seguro, pero también muy lento, afectando el rendimiento de la aplicación.

9. ¿Qué diferencia hay entre bcrypt y bcryptjs?

10. ¿Por qué nunca se deben almacenar contraseñas en texto plano?

Porque si la base de datos es comprometida, las contraseñas quedan expuestas sin protección, generando un riesgo crítico de seguridad.


🔴 Avanzado

11. ¿Cómo garantizar que un sistema con Bcrypt siga siendo seguro en el tiempo?

12. ¿Qué sucede si se genera un nuevo hash para la misma contraseña?

El hash será diferente porque el salt generado es único en cada ocasión.

13. ¿Cómo combinar Bcrypt con otras medidas de seguridad?

14. ¿Cuándo conviene usar Argon2 en lugar de Bcrypt?

Argon2 es más moderno y resistente a ataques de hardware especializado (como GPUs o ASICs). Conviene en entornos que requieren máxima seguridad.

15. ¿Cuál es una buena práctica para manejar Bcrypt en proyectos grandes?

Centralizar la lógica de hashing en un servicio o módulo de utilidades, evitando duplicar código y asegurando un control unificado sobre la configuración de seguridad.

🔼 temas