Sono confuso con bcrypt, penserei che avrei bisogno di memorizzare il mio salt, e quindi confrontare la mia password in testo semplice + salt con la password hash, tuttavia dalla documentazione non sembra che la memorizzazione del sale sia necessaria a tutti . Effettivamente ho usato questo codice per creare la password salt e hash:
let salt = await bcrypt.genSalt(10);
const saltpasshash = await new Promise((resolve, reject) => {
bcrypt.hash(plain_text_password, salt, function(err, hash) {
if (err) reject(err)
resolve(hash)
});
})
//NOTE I SAVE saltpasshash as users pass and the salt in a separate field in the users table.
Funziona, ciò di cui sono confuso è che restituirà un risultato valido se confronto come segue:
valid = await bcrypt.compare(plain_text_password, user.saltpasshash);
Sono confuso sul perché questo sarebbe valido quando non sto fornendo il sale, e in tal caso, perché conservare il sale?