lunes, 26 de agosto de 2013

[PHP] Funciones de hashing de contraseñas

¿Por que usar Hash?
Todos sabemos que es importante tener contraseñas seguras en nuestra base de datos de forma de que si algún "hacker" logra entrar en ella le sea muy difícil o imposible descifrar la contraseña usando saltos, php ha implementado una función password_hash a partir de PHP 5.5. Pero para los que no tienen PHP 5.5 se puede usar una implementacion password_compat  la cual solo funciona en PHP >=5.3.7.


Constantes predefinidas

Las usamos para crear el hash de la contraseña. Existen dos:

PASSWORD_BCRYPT - se utiliza para crear un hash de la contraseña con el algoritmo CRYPT_BLOWFISH.

if(CRYPT_BLOWFISH == 1){
    echo '<br />Blowfish: '.crypt('rasmuslerdorf','$2a$07$usesomesillystringforsalt$')."\n";
    }
PASSWORD_DEFAULT - si no se especifica otro algoritmo se utiliza este por defecto.

Password Hashing

Aqui ahora si vamos al tema! :D





En este caso como mi version no es la requerida para usar esta funcion utilizare la libreria que podemos descargas solo es necesario el archivo password.php


Funcion password_hash()

Esta funcion  lo que hace es crear un hash de contraseña. Tiene los siguientes parametros:


password_hash($acalacontraseña,$acaloquegeneralacontraseña,
$acaopcionesdelquegeneralascontraseñas)

$acalacontraseña - Es la contraseña que se utilizara
$acaloquegeneralacontraseña - Es el algoritmo que se utilizara
$acaopcionesdelquegeneralascontraseñas - Son opciones para el algoritmo que cifra cada algoritmo tiene sus opciones.


Un ejemplo:









El resultado es el siguiente:



Funcion password_verify()

En otro caso supongamos que si insertamos esos datos, en una db con un salto mas seguro, podemos empezar a verificar esos datos usando de manera rapida esta funcion, la cual comprueba que la contraseña coincida con el hash, su sintaxis es:

password_verify($contraseña,$hash)

$contraseña - La contraseña, si suponemos que es un login podria ser la entrada del usuario
$hash - El hash que generamos con la funcion password_hash()

Un ejemplo:

En este caso podriamos usar un select para seleccionar los datos como es la contraseña si estuviera guardada en una base de datos y asi verificarla, pero como es un ejemplo, entonces aqui esta:



Si ingresamos algo que no sea micontrasena en el campo de password entonces nos devolvera un mensaje de error:


Pero en caso de que ingreses micontrasena devolvera un mensaje de que te has logeado correctamente.




Y bueno eso seria todo hay otras dos funciones que son:

password_need_rehash()
password_get_info()
No menos importantes pero no van a ser explicadas aqui.

Espero que este apartado les haya sido de utilidad y lo usen en sus proyectos. :)


No hay comentarios:

Publicar un comentario en la entrada