PHP | Funciones crypt(), password_hash()

En el artículo anterior sobre las funciones md5(), sha1() y hash() , vimos que uno de los principales inconvenientes del método era que estos algoritmos eran muy rápidos debido a su menor complejidad y, por lo tanto, más vulnerables a los ataques, incluso son sugirió no utilizar en un proyecto completo de mayor importancia. Por lo tanto, PHP ahora proporciona un par de métodos nuevos para codificar las contraseñas de los usuarios de una manera mucho más optimizada y segura. Los métodos se discuten de la siguiente manera:

Función cripta()

Sintaxis:

string crypt ($string, $salt)

Parámetros : La función puede tomar hasta un máximo de dos parámetros de la siguiente manera:

  • $string: este parámetro espera que la string se convierta en hash.
  • $salt: este es un parámetro opcional por definición, pero casi nunca se espera que deje el campo salt sin definir. El parámetro salt espera que se use una string aleatoria como base del hashing. Muchos desarrolladores tienden a usar la combinación de algunos campos específicos y caracteres aleatorios agregados.

Tipo de devolución : esta función devuelve la string codificada. Como crypt() era mejor que sus predecesores, se usaba ampliamente, pero la confiabilidad de la función era cuestionable, por lo tanto, PHP ahora proporciona una función integrada para cumplir con el propósito de Hashing de contraseñas y se recomienda su uso.

Función contraseña_hash()

Sintaxis:

string password_hash($string, $algo, $options)

Parámetros : La función puede tomar hasta un máximo de tres parámetros de la siguiente manera:

  • $string: este parámetro espera que la string se convierta en hash.
  • $algo: este parámetro espera un valor entero que se refiera al algoritmo que se usará para el propósito. Tres algoritmos están disponibles de la siguiente manera:
    • PASSWORD_DEFAULT: este es el algoritmo recomendado, ya que el equipo de desarrolladores de PHP está agregando nuevos algoritmos y actualizando los siguientes para que sean la mejor opción.
    • PASSWORD_BCRYPT: este algoritmo utiliza el algoritmo CRYPT_BLOWFISH y genera un hash equivalente a crypt().
    • PASSWORD_ARGON2I: Utiliza el algoritmo Hashing Argon2.
  • $options: este es un parámetro opcional que espera una serie de opciones avanzadas como se describe. Las opciones admitidas para cada algoritmo difieren ligeramente entre sí. Las opciones admitidas son las siguientes: Opciones admitidas para PASSWORD_BCRYPT :
    • Costo: Costo Algorítmico Máximo a aplicar. El valor predeterminado es 10. El costo algorítmico afecta directamente el tiempo de carga y depende significativamente del hardware en ejecución.
    • Sal: los desarrolladores también pueden proporcionar sales manuales, pero no se recomienda.
    • Memory cost: Costo máximo de memoria a aplicar para generar el hash.
    • Costo de tiempo: Tiempo máximo que se tomará para calcular el hash.
    • Hilos: Número de hilos a utilizar.

Tipo de devolución : esta función devuelve la string hash en caso de éxito o FALSO. El siguiente programa ilustra el funcionamiento de crypt() y password_hash() en PHP: 

PHP

<?php
 
// PHP code to illustrate the working of
// crypt() and password_hash()
 
$str = 'Password';
$options = [
               'cost' => 10,
               'salt' => '$P27r06o9!nasda57b2M22'
           ];
            
echo sprintf("Result of crypt() on %s is %s\n",
             $str, crypt($str, $options['salt']));
echo sprintf("Result of DEFAULT on %s is %s\n",
      $str, password_hash($str, PASSWORD_DEFAULT));
echo sprintf("Result of BCRYPT on %s is %s\n", $str,
    password_hash($str, PASSWORD_BCRYPT, $options));
     
?>

Producción:

Result of crypt() on Password is $PFKQN2rkmKu6
Result of DEFAULT on Password is $2y$10$yqFvDGy
v2Tz4d/A/yulbFe5ISH9oR3gvU7GQLMYRKR7XQJnGpQOau
Result of BCRYPT on Password is $2y$10$JFAyN3Iw
Nm85IW5hc2RhNOlEBYnR992.gf.5FqZhHSbln3a4jtQpi

Puntos importantes a tener en cuenta :

  • Un algoritmo hash debe ser preferiblemente una ruta unidireccional, es decir, no debe existir un método de descifrado, siguiendo este concepto, las funciones descritas no tienen método de descifrado.
  • Al no tener ningún método de descifrado, la validación de la contraseña requeriría cifrar cada entrada proporcionada por el usuario en el momento del inicio de sesión, por lo tanto, PHP proporciona la función password_verify() para validar la misma.
  • crypt() y password_hash() son compatibles entre sí. Podemos decir que el método password_hash() es un envoltorio mucho más fácil de usar del propio método crypt().

Referencia :

Publicación traducida automáticamente

Artículo escrito por PronabM y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *