2013-06-01 5 views
6

La funzione password_verify() nella nuova API password PHP controlla se la password corrisponde all'hash. L'hash è generato da password_hash(), che per impostazione predefinita utilizza un salt casuale e uno cost = 10.Come può password_verify convalidare le password senza conoscere sale e costi?

Ho sempre pensato (anche se non l'ho mai studiato) che è necessario memorizzare il sale nel database e quindi quando si desidera verificare la password, l'hash con il sale specificato con lo stesso costo. Come può password_verify() verificare la password senza conoscere sale e costi?

risposta

6

La stringa restituita da password_hash() contiene non solo l'hash, ma anche l'algoritmo, il costo e il sale.

+0

... questa è una # $ @ ottima idea ... perché nessuno ci aveva pensato prima? Ho pensato di memorizzare anche una "versione password", quindi se avessi cambiato l'algoritmo, le persone con "hash vecchi" erano comunque in grado di accedere ... ma con questa API non c'è bisogno di fare tutte queste cose! –

+1

Sì, speriamo che gli sviluppatori PHP lasceranno finalmente che 'md5()' si ritiri ora. –

+0

@LucasMalor - Questa non è una nuova invenzione, la funzione di PHP 'crypt()' è sempre stata così, e questa è la funzione di lavoro dietro 'password_hash()'. – martinstoeckli