echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT); // why does it give different result every single time
Y luego, password_verify () conoce TODOS esos hash que coinciden con "rasmuslerdorf", para mí es como magia, incluso el documento lo expresó claramente:
Tenga en cuenta que password_hash () devuelve el algoritmo, el costo y la sal como parte del hash devuelto. Por lo tanto, toda la información que se necesita para Verifique que el hash está incluido en él. Esto permite que la función de verificación Verifique el hash sin necesidad de almacenamiento separado para la sal o información del algoritmo.
Esta función es segura contra ataques de tiempo.
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
¿Qué está pasando? ¿Cómo password_verify () sabe que una cadena loca coincide con 'rasmuslerdorf' pero los hackers no?