Quiero implementar mi programa en otro servidor. ¿Puede mi script descifrar correctamente todas las contraseñas de mis clientes en la base de datos?
//old server const bcrypt = require("bcrypt"); const salt = bcrypt.genSalt(); password = bcrypt.hash("password", salt); //new server const auth = bcrypt.compare(password, "password")¿Cómo puede BCrypt descifrar contraseñas con una sal variable que se genera aleatoriamente?
Los hashes de BCrypt se almacenan en una de dos formas.
El más común es el Formato de Cripta Modular y tiene la forma...
$2y$10$kV7kssmFuFOydBewIp9ele8GMkWGDPpte6jGGDAabpsBmxtzWxfZWDónde:
$ es un delimitador2 indica que el algoritmo es BCrypty es la versión de BCryptkV7kssmFuFOydBewIp9ele es la sal8GMkWGDPpte6jGGDAabpsBmxtzWxfZW es el hash.Una alternativa más moderna es el formato de cadena PHC, que hace más evidente qué partes corresponden a qué valores:
$bcrypt$v=98$r=10$cIF1Ev2ATA6/iYv4kddXCQ$qcrDoGjsiB2eLq1/vCZWiAZ8bEs4+QsEn ambos casos, la cadena persistente en su base de datos es completamente portátil y contiene todo lo necesario para comparar una contraseña candidata: el hash, la sal, el costo, el nombre del algoritmo y la versión del algoritmo.