La mejor manera de cifrar y descifrar contraseñas es utilizar una biblioteca estándar en PHP porque el método de cifrar y descifrar contraseñas correctamente desde cero es complejo e implica múltiples posibilidades de vulnerabilidades de seguridad. El uso de la biblioteca estándar garantiza que la implementación de hashing sea verificada y confiable.
Nota: Esto utiliza la API de contraseña de PHP disponible en la versión 5.5.0 y superior .
Cifrado de la contraseña: Para generar un hash a partir de la string, usamos la función password_hash().
Sintaxis:
string password_hash(string $password, mixed $algo, [array $options])
La función password_hash() crea un nuevo hash de contraseña de la string utilizando uno de los algoritmos hash disponibles. Devuelve el hash que actualmente tiene 60 caracteres; sin embargo, a medida que se agreguen algoritmos nuevos y más fuertes a PHP, la longitud del hash puede aumentar. Por lo tanto, se recomienda asignar 255 caracteres a la columna que se puede usar para almacenar el hash en la base de datos.
Los siguientes algoritmos son compatibles actualmente cuando se utiliza esta función:
- CONTRASEÑA_DEFAULT
- CONTRASEÑA_BCRYPT
- CONTRASEÑA_ARGON2I
- CONTRASEÑA_ARGON2ID
Se pueden pasar opciones adicionales a esta función que se pueden usar para establecer el costo del cifrado, la sal que se usará durante el hashing, etc. en la array $options .
El siguiente ejemplo muestra el método de uso del método password_hash() :
Ejemplo:
php
<?php // The plain text password to be hashed $plaintext_password = "Password@123"; // The hash of the password that // can be stored in the database $hash = password_hash($plaintext_password, PASSWORD_DEFAULT); // Print the generated hash echo "Generated hash: ".$hash; ?>
Producción:
Hash generado: $2y$10$7rLSvRVyTQORapkDOqmkhetjF6H9lJHngr4hJMSM2lHObJbW5EQh6
Descifrado de la contraseña: Para descifrar un hash de contraseña y recuperar la string original, usamos la función password_verify() .
Sintaxis:
bool password_verify(string $password, string $hash)
La función password_verify() verifica que el hash dado coincida con la contraseña dada, generada por la función password_hash() . Devuelve verdadero si la contraseña y el hash coinciden, o falso en caso contrario.
php
<?php // Plaintext password entered by the user $plaintext_password = "Password@123"; // The hashed password retrieved from database $hash = "$2y$10$8sA2N5Sx/1zMQv2yrTDAaOFlbGWECrrgB68axL.hBb78NhQdyAqWm"; // Verify the hash against the password entered $verify = password_verify($plaintext_password, $hash); // Print the result depending if they match if ($verify) { echo 'Password Verified!'; } else { echo 'Incorrect Password!'; } ?>
Producción:
Password Verified!
PHP es un lenguaje de secuencias de comandos del lado del servidor diseñado específicamente para el desarrollo web. Puede aprender PHP desde cero siguiendo este tutorial de PHP y ejemplos de PHP .
Publicación traducida automáticamente
Artículo escrito por ajinkyabawaskar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA