Nueva forma de codificar contraseñas en PHP

encryptar

Una de las novedades mas importantes de PHP 5.5 en el área de seguridad, es la nueva API que permite codificar las contraseñas.

Internamente la API utiliza la función crypt() y está disponible desde la versión 5.5 de PHP

Para codificar la contraseña con esta nueva API, utilizaremos la instrucción: ‘password_hash’ la cual necesita de dos argumentos como minimo, el primero es la clave a codificar y el segundo el tipo de algoritmo deseado para codificarlo.

Ejemplo:
$pass=  password_hash('escuelactec', PASSWORD_DEFAULT);

Para el segundo argumento, existen 2 variantes:

PASSWORD_DEFAULT: codifica la contraseña utilizando el algoritmo bcrypt y el resultado es una cadena de 60 caracteres de longitud, cuyos primeros caracteres son $2y$10$. El algoritmo utilizado y la longitud de la contraseña codificada cambiarán en las próximas versiones de PHP, cuando se añadan algoritmos todavía más seguros. Si guardas las contraseñas en una base de datos, la recomendación es que reserves 255 caracteres para ello y no los 60 que se pueden utilizar actualmente.

PASSWORD_BCRYPT: codifica la contraseña utilizando el algoritmo CRYPT_BLOWFISH. Al igual que en el caso anterior, la contraseña codificada ocupa 60 caracteres en total, siendo los primeros caracteres $2Y$.

Estas funciones para codificar contraseñas se han diseñado a propósito para que sean muy lentas y para que siempre tarden el mismo tiempo en obtener el resultado. De esta forma se evitan los ataques de seguridad conocidos como timing attack.

Para comprobar la contraseña codificada, utilizaremos la función: ‘password_verify()’, esta necesita dos argumentos, el primero la contraseña introducida por el usuario y el segundo la contraseña codificada.

Ejemplo:

$pass_usuario = 'escuelactec';
$pass_codificado = '$2y$10$Hsu10.ejlaJPb1iDBolN8ucV9ER2Jin4BcA5GFSoY3dEg.4QNPxuC';
$resultado = password_verify($pass_usuario , $pass_codificado);
if($resultado){
      echo "Acceso autorizado a zona privada";
}else{
      echo "Acceso denegado, contraseña incorrecta";
}

Deja un comentario

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

9 + siete =