Una de las mejores formas de almacenar contraseñas de forma segura es saltearlas y codificarlas. Salar y hash convierte una contraseña simple en un valor único que es difícil de revertir. La biblioteca bcrypt le permite usar hash y salt de contraseñas en Node.js con muy poco esfuerzo.
¿Qué es el hashing de contraseñas?
Hashing de contraseña significa pasar una contraseña de texto sin formato a través de un algoritmo hash para generar un valor único. Algunos ejemplos de algoritmos hash son bcrypt, scrypt y SHA. La desventaja del hashing es que es predecible.
Cada vez que pase la misma entrada a un algoritmo hash, generará la misma salida. Un pirata informático con acceso a la contraseña codificada puede aplicar ingeniería inversa al cifrado para obtener la contraseña original. Pueden utilizar técnicas como ataques de fuerza bruta o mesas de arcoiris. Aquí es donde entra la salazón.
¿Qué es el salteo de contraseñas?
Salado de contraseñas agrega una cadena aleatoria (la sal) a una contraseña antes de codificarla. De esta manera, el hash generado siempre será diferente cada vez. Incluso si un pirata informático obtiene la contraseña codificada, no es práctico para ellos descubrir la contraseña original que la generó.
Cómo usar bcrypt para hash y verificar una contraseña
cripta es un módulo npm que simplifica el salting y hash de contraseñas.
Paso 1: Instalar bcrypt
Usando npm:
npm Instalar en pc cripta
Usando hilo:
hilo añadir bcrypt
Paso 2: Importar bcrypt
constante bcripta = exigir("bcrypt")
Paso 3: generar una sal
Para generar la sal, llama al bcrypt.genSalt() método. Este método acepta un valor entero que es el factor de costo que determina el tiempo que se tarda en codificar una contraseña. Cuanto mayor sea el factor de coste, más tiempo tardará el algoritmo y más difícil será revertir el hash utilizando la fuerza bruta. Un buen valor debe ser lo suficientemente alto para proteger la contraseña, pero también lo suficientemente bajo como para no ralentizar el proceso. Suele oscilar entre 5 y 15. En este tutorial, usaremos 10.
bcrypt.genSalt (10, (error, sal) => {
// usarsalparapicadilloclave
})
Paso 4: hash la contraseña
Pase la contraseña simple y la sal generada al picadillo() método:
bcrypt.genSalt (10, (error, sal) => {
bcrypt.hash (texto simple Contraseña, sal, función(err, hash) {
// Almacenar hash en la base de datos
});
})
Una vez que haya generado el hash, guárdelo en la base de datos. Lo usará para verificar una contraseña y autenticar a un usuario que intenta iniciar sesión.
En lugar de generar la sal y el hash por separado, también puede generar automáticamente la sal y el hash con una sola función.
bcrypt.hash (texto sin formato Contraseña, 10, función(err, hash) {
// almacenar hash en la base de datos
});
Paso 5: Compare las contraseñas usando bcrypt
Para autenticar usuarios, deberá comparar la contraseña que le proporcionan con la de la base de datos. bcrypt.comparar() acepta la contraseña de texto sin formato y el hash que almacenó, junto con una función de devolución de llamada. Esa devolución de llamada proporciona un objeto que contiene cualquier error que haya ocurrido y el resultado general de la comparación. Si la contraseña coincide con el hash, el resultado es verdadero.
bcrypt.compare (texto simple Contraseña, hash, función(error, resultado) {
si (resultado) {
// la contraseña es válida
}
});
Uso de Async/Await
Puede codificar y verificar contraseñas usando async/await de la siguiente manera.
asíncronofunciónhashcontraseña(texto sin formatoContraseña) {
constante hash = esperar bcrypt.hash (texto sin formato Contraseña, 10);
// Almacenar hash en la base de datos
}
// comparar contraseña
asíncronofuncióncompararcontraseña(texto plano Contraseña, hash) {
constante resultado = esperar bcrypt.compare (texto simple Contraseña, hash);
devolver resultado;
}
usando promesas
La biblioteca bcrypt también admite el uso de promesas.
funciónhashcontraseña(texto sin formatoContraseña) {
cripta.picadillo(texto sin formatoContraseña, 10)
.entonces (hash => {
// Almacenar hash en la base de datos
})
.captura(Eh => {
consola.log (error)
})
}
funcióncompararcontraseña(texto plano Contraseña, hash) {
bcyrpt.comparar(texto sin formatoContraseña, picadillo)
.entonces (resultado => {
devolver resultado
})
.captura(Eh => {
consola.log (error)
})
}
Triturar y salar es una victoria fácil
Puede usar la biblioteca bcrypt para codificar y verificar contraseñas en Node.js. El hashing de contraseñas minimiza las posibilidades de que los ciberdelincuentes las utilicen para acceder a datos o servicios confidenciales. Salar sus contraseñas hash las hace aún más seguras. Aparte del hashing, siempre valide la seguridad de la contraseña como medida de seguridad adicional.
Los 8 trucos más comunes para hackear contraseñas
Leer siguiente
Temas relacionados
- Programación
- Seguridad
- Programación
- JavaScript
- Seguridad
- Algoritmos
Sobre el Autor
Mary Gathoni es una desarrolladora de software apasionada por crear contenido técnico que no solo sea informativo sino también atractivo. Cuando no está codificando o escribiendo, le gusta salir con amigos y estar al aire libre.
Suscríbete a nuestro boletín
¡Únase a nuestro boletín para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!
Haga clic aquí para suscribirse