Come funziona password_hash / password_verify in php?

1

link

    echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT); // why does it give different result every single time

E poi, password_verify () conosce TUTTA quella corrispondenza hash "rasmuslerdorf", per me è come per magia anche il doc ha dichiarato chiaramente:

Note that password_hash() returns the algorithm, cost and salt as part of the returned hash. Therefore, all information that's needed to verify the hash is included in it. This allows the verify function to verify the hash without needing separate storage for the salt or algorithm information.

This function is safe against timing attacks.

    echo password_verify ( 'rasmuslerdorf' , '$2y$10$EMawXU7qNS4GzU2Do8bByeb7sSQZxecvmZ6mBrToxsOaY7RMAIGua' );  //=>true
    echo password_verify ( 'rasmuslerdorf' , '$2y$10$0vMA2k7LxTBstI/J7clkkuZZ/XtuS1fklVuoM6sl4Fc/aj1avQa5u' ); //=>true
    echo password_verify ( 'rasmuslerdorf' , '$2y$10$iuE2EzHMNONAWFKh/4Wyl.dcBxgFaNzAh32va0/gyE4ScqnNr/Uc.' ); //=>true

Che sta succedendo? In che modo password_verify () conosce una fasulla corrispondenza delle stringhe 'rasmuslerdorf' ma gli hacker no?

    
posta Phung D. An 20.06.2018 - 18:34
fonte

1 risposta

4

La funzione password_hash , internamente, esegue questi passaggi:

  1. Seleziona un nuovo salt casuale ogni volta che lo chiami.
  2. Applica una costosa funzione di hash che prende come input il salt random, la password e altri parametri dell'algoritmo (ad esempio, fattori di costo).
  3. Combina i parametri dell'algoritmo, l'output casuale salt e hash in una stringa di output che può essere analizzata per ripristinarli individualmente.

La scelta casuale in # 1 è la ragione per cui produce output diversi ogni volta anche se fornisci lo stesso input. L'output formattato del passaggio # 3 è ciò che consente a password_verify di conoscere il sale casuale scelto da password_hash .

    
risposta data 21.06.2018 - 00:14
fonte

Leggi altre domande sui tag