Encriptar contraseñas implica transformar la contraseña en un formato que no puede ser fácilmente revertido a su forma original. Esto se logra mediante técnicas de hashing y salting:
bcrypt
en JavaScript
bcrypt
es una de las librerías más populares para encriptar contraseñas. Proporciona una forma segura y efectiva de hash de contraseñas.
bcrypt
Para usar bcrypt
en tu proyecto, primero necesitas instalarlo. Si estás trabajando con Node.js, puedes instalarlo usando npm o yarn:
npm install bcrypt
o
yarn add bcrypt
Aquí hay un ejemplo de cómo encriptar una contraseña usando bcrypt
:
const bcrypt = require('bcrypt');
const saltRounds = 10; // Número de rondas de sal
const plainPassword = 'miContraseñaSegura';
bcrypt.hash(plainPassword, saltRounds, function(err, hash) {
if (err) {
console.error('Error encriptando la contraseña:', err);
} else {
console.log('Contraseña encriptada:', hash);
}
});
En este ejemplo:
saltRounds
indica cuántas veces se aplica el algoritmo de hash. Más rondas implican mayor seguridad pero más tiempo de procesamiento.
plainPassword
es la contraseña que quieres encriptar.
bcrypt.hash
genera el hash de la contraseña.
Para verificar una contraseña ingresada por el usuario, compara el hash almacenado con la contraseña proporcionada:
const plainPassword = 'miContraseñaSegura';
const hashedPassword = '$2b$10$eW5JtOcCvfrE8W9bVbGh6.QWOv1kFDwVbRBqzBiYqMTlgxT.SQeK2'; // Ejemplo de hash previamente almacenado
bcrypt.compare(plainPassword, hashedPassword, function(err, result) {
if (err) {
console.error('Error verificando la contraseña:', err);
} else if (result) {
console.log('La contraseña es correcta.');
} else {
console.log('La contraseña es incorrecta.');
}
});
crypto
en JavaScript
crypto
es un módulo incorporado en Node.js que también puede ser utilizado para encriptar contraseñas. Es especialmente útil para generar hashes y manejar funciones criptográficas.
crypto
A continuación, se muestra cómo generar un hash de una contraseña utilizando crypto
:
const crypto = require('crypto');
const salt = crypto.randomBytes(16).toString('hex');
const plainPassword = 'miContraseñaSegura';
const hash = crypto.pbkdf2Sync(plainPassword, salt, 1000, 64, 'sha512').toString('hex');
console.log('Salt:', salt);
console.log('Hash:', hash);
En este ejemplo:
crypto.randomBytes
genera una sal aleatoria.
crypto.pbkdf2Sync
genera el hash utilizando el algoritmo PBKDF2 con SHA-512.
crypto
Para verificar una contraseña usando crypto
, debes volver a generar el hash usando la misma sal y comparar el resultado:
const salt = '3c6e0b8a9c15224a8228b9a98ca1531d'; // Ejemplo de sal previamente almacenada
const hashedPassword = '74b87337454200d4d33f80c4663dc5e5'; // Ejemplo de hash previamente almacenado
const plainPassword = 'miContraseñaSegura';
const hash = crypto.pbkdf2Sync(plainPassword, salt, 1000, 64, 'sha512').toString('hex');
if (hash === hashedPassword) {
console.log('La contraseña es correcta.');
} else {
console.log('La contraseña es incorrecta.');
}
La encriptación de contraseñas es una práctica esencial para proteger la información de los usuarios en cualquier aplicación web. Tanto bcrypt
como crypto
proporcionan métodos efectivos para encriptar y verificar contraseñas en JavaScript. bcrypt
es más fácil de usar y específicamente diseñado para contraseñas, mientras que crypto
ofrece más flexibilidad y control para tareas criptográficas generales. Utiliza estas herramientas para asegurar que las contraseñas de tus usuarios estén siempre protegidas.
Jorge García
Fullstack developer