¿Cómo cifrar y descifrar contraseñas usando PHP?

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

Deja una respuesta

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