bcrypt non è necessario conservare il sale?

4

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?

    
posta edencorbin 28.04.2018 - 16:33
fonte

1 risposta

4

Da una descrizione di bcrypt su Wikipedia :

... The rest of the hash string includes the cost parameter, a 128-bit salt (Radix-64 encoded as 22 characters), and 184 bits of the resulting hash value (Radix-64 encoded as 31 characters)

Quindi, il sale viene automaticamente incluso nella stringa di output, il che significa che non è necessario aggiungerlo da solo.

    
risposta data 28.04.2018 - 16:47
fonte

Leggi altre domande sui tag