que password_hash password metodos encriptar encriptacion ejemplo desencriptar decrypt contraseña php database passwords phpass

password_hash - Contraseña portátil(PHPass) hashes. ¿Debo usarlos?



password_hash php ejemplo (1)

Estoy instalando un script de registro de usuario (Autenticación del tanque) para mi sitio web.

En la guía de instalación se dice,

ADVERTENCIA: De forma predeterminada, la biblioteca genera fuertes hashes de contraseña específicos del sistema que no son portátiles. Significa que una vez creada, la base de datos de usuarios no se puede volcar y exportar a otro servidor. Este comportamiento también se puede cambiar en el archivo de configuración.

Esto me puso en un dilema. En el futuro, es posible que desee cambiar los servidores, pero tampoco quiero contraseñas débiles. ¿Las contraseñas portátiles de hash son un gran riesgo? Y lo que es más importante, ¿qué quieren decir con hashes? ¿Es la longitud del personaje?


La autenticación de tareas usa PHPass para el hashing de contraseñas (una versión antigua, no es una buena señal; es posible que desee actualizarla en su instalación) PHPass tiene dos modos, portable y bcrypt.

Dependiendo de la versión de PHP, no es necesario tener hashes portátiles activados. En PHP 5.3 y superior, PHP proporciona su propia implementación de bcrypt si no está disponible en el sistema. Si todos sus servidores tienen PHP 5.3 y superior, recomiendo encarecidamente desactivar los hash portátiles. PHPass "portables hashes" existe porque, dependiendo de la versión de PHP instalada, bcrypt podría no estar disponible.

Dicho esto, los hashes portátiles PHPass almacenan la sal en su hash. Es por eso que cada ejecución en la misma contraseña es diferente.

Además, PHPass usa PHP_VERSION durante la generación de esos hashes * para verificar si la función md5() disponible con esa versión admite el parámetro $rawMode . Si no es así, pack() se utiliza para transformar los datos hexadecimales en binarios (tenga en cuenta que esto es considerablemente más lento que simplemente usando $rawMode , por lo que se realiza la rama).

Nuevamente, si todos los servidores ejecutan PHP 5.3 y superior, recomiendo encarecidamente desactivar el modo portátil y dejar que PHPass use bcrypt lugar. Dado que PHP 5.3+ proporciona su propia implementación cuando el sistema no está disponible, su hash será verificable en todos los sistemas operativos. Incluso si desactivas el modo portátil, PHPass seguirá siendo lo suficientemente inteligente como para revisar tus hashes viejos de la manera correcta.

* Línea 131

EDITAR: Para obtener una explicación más detallada, aquí se explica cómo se generan los hashes en modo portátil (simplificado, no usa las variables reales encontradas en PHPass, pero es preciso). Tenga en cuenta que PHPass utiliza su propia versión de codificación base64.

  1. $final = ''$P$''

  2. $final .= encode64_int($rounds) (del constructor, el mínimo es 5 en PHP 5+, 3 otros)

  3. $final .= genSalt() (Salt es de 6 bytes ... 8 bytes en formato "encode64").

  4. $hash = md5($salt . $password)

  5. Para 2 $rounds , haz $hash = md5($hash . $password)

  6. $final = encode64($hash)

Así que el hash final es esencialmente este:

$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0 /__________//____________________/ / / / / Actual Hash / / $P$ 9 IQRaTwmf /_/ / /______/ / / / / / / Salt / / / / # Rounds (not decimal representation, 9 is actually 11) / / Hash Header