¿Cómo funciona password_hash / password_verify en php?

1

enlace

    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?

    
pregunta Phung D. An 20.06.2018 - 18:34
fuente

1 respuesta

4

La función password_hash , internamente, lleva a cabo estos pasos:

  1. Escoge una sal aleatoria nueva cada vez que la llamas.
  2. Aplica una función hash costosa que toma como entrada el salt aleatorio, la contraseña y otros parámetros del algoritmo (por ejemplo, factores de costo).
  3. Combina los parámetros de algoritmo, sal aleatoria y salida de hash en una cadena de salida que se puede analizar para recuperarlos individualmente.

La elección aleatoria en el # 1 es la razón por la que produce una salida diferente cada vez, incluso si proporciona la misma entrada. La salida formateada del paso # 3 es lo que permite a password_verify conocer la sal aleatoria elegida por password_hash .

    
respondido por el Luis Casillas 21.06.2018 - 00:14
fuente

Lea otras preguntas en las etiquetas