Bibliotecas para encriptar contraseñas en PHP

    La criptografía es uno de los temas mas ampliamente que se debe tratar solo por los expertos, ya que he visto muchos tutoriales  que abundan en las paginas web como crear nuestros propios hashing más comunes en md5() y sha1() para almacenar contraseñas, la cual es muy mala práctica.

    MD5, SHA1 o SHA256 son algoritmos para ser muy rápidos y eficientes, sin embargo utilizando técnicas y equipos modernos han demostrado que es muy fácil extraer por fuerza bruta la salida de estos algoritmos. Por tal razón los expertos de seguridad  no recomiendan el uso de estos algoritmos. Pero quizá alguno de vosotros  se pregunta como es que se puede violentar, veamos un sencillo ejemplo :

    <?php
    $contrasena="test123456";
    echo md5($contrasena);
    //La salida es:
    //47ec2dd791e31e2ef2076caf64ed9b3d
    ?>

    Al copiar la salida de la contraseña encriptada en la siguientes pagina web: md5onlinemd5cracker , usted vera que la contraseña sera revelada.

    En los siguientes párrafos se recomienda usar bibliotecas para encriptar contraseñas en PHP ya probados y usados en las aplicaciones web mas conocidos, en vez de estar utilizando MD5, SHA1,  SHA256 o otros métodos de encriptacion  desconocidos hechos por terceros. Otra opción seria estudiar criptografia hasta tener la habilidad suficiente y avanzada, por el cual puede partir desde esta página hash de contraseñas seguro.

    PHPASS

    Es una de las bibliotecas para encriptar contraseñas en PHP  diseñado por Solar Designerpermite generar hashes utilizando el algoritmo más seguro para implementar en nuestros sistemas de logeo y demás. La clase puede soportar la versión de PHP 5.3 o superiores, para saber mas sobre esta clase phpass puede visitar la siguiente pagina donde encontrara sobre hashing de la clave con phpass  y así como también administración de usuarios y contraseñas.

    En el siguiente ejemplo mostraremos como usar esta clase, en nuestro proyecto.

    <?php 
    require_once("PasswordHash.php");
    //Instancia de la clase
    $ecnriptar = new PasswordHash(8, FALSE);
    
    //Contraseña
    $laClave="test12345";
    //Generando el HASH
    $hash = $ecnriptar->HashPassword($laClave);
    //Se imprime el HASH generado
    echo  'Hash: ' . $hash . "\n";
    //Se hace la comparion de la contraseña
    if($ecnriptar->CheckPassword($laClave, $hash)){
    	echo "La contraseña que escribiste es correcto";
    }else{
    	echo "Error al intentar escribir contraseña";
    }
    ?>

    PHP-PasswordLib

    Es una de las bibliotecas para encriptar contraseñas en PHP, para generar hashing automáticamente  con unos cuantos lineas de código,  soporta desde la versión PHP 5.3.2 o superior. Algunas de las características que mencionan son: portabilidad, probado, extensible, fácil de usar y entre otros. Para ser implementado  en nuestros proyectos descargar desde GitHub y mas información.

    He aquí un ejemplo como generar el hash.

    <?php 
    //Importando la librería
    require_once 'Captchaweb/classphp/PasswordLib/PasswordLib.php';
    //Instancia de la clase
    $lib = new PasswordLib\PasswordLib();
    $Contrasena="test123456";
    //Creando el Hash
    $hash = $lib->createPasswordHash($Contrasena);
    echo "<strong>HASH: </strong>".$hash."<br>";
    //Salida: $2y$10$I66zF8wuXJdZDoYRcYP58eCXNcYyEzgSiphjevfI9oAPNAYoJKur6
    //Se verifica la contaseña
    if (!$lib->verifyPasswordHash($Contrasena, $hash)){
      echo "Contraseña incorrecto"; 
    }else{
       echo "Contraseña correcto";
    }
     ?>	
    

    Passwordcompat

    Passwordcompat es una biblioteca que permite generar hashing, y que permite el uso fácil sobre metodo crypt() de php 5.5.0 para hacer sencilla la creación y administración de contraseñas de una forma segura. Para usar esta biblioteca se debe tener instalado PHP 5.3.7 o superior, por lo contrario tendría problemas de ejecución.

    A continuación se muestra como usar la librería.

    <?php
    //Importando la biblioteca
    require_once 'Captchaweb/classphp/password_compat/lib/password.php';
    
    $Pasword="test123456";
    //Generando Hash y permitiendo el costo de CPU
    $Hashgen =password_hash($Pasword, PASSWORD_BCRYPT,array("cost" => 10));
    echo "<strong>HASH password_compat: </strong>".$Hashgen."<br>";
    //Salida de hash $2y$10$3DN8b.kSDD7Fs1BCvEgna.uUt2slOu3REZpsJDs1FPw1On4Iml6/i
    //Verificando la contraseña
    if (password_verify($Pasword, $Hashgen)) {
           echo "Contraseña valido<br>";  
        } else {
            echo "Contraseña no valido<br>"; 
        }
     ?>

    php encryption

    php encryption es una biblioteca para la incriptaciòn de datos como: Cifrado y descifrado de cadenas, cifrado y descifrado de archivos y demas. , soporta desde PHP 5.4 o posterior, esta biblioteca fue diseñado por autores Taylor Hornby y de Scott Arciszewski ,ya que crearon esta biblioteca para que sea mas seguro y fácil de usar, se quiere saber mas información sobre esta biblioteca visitar esta pagina prácticamente es un tutorial como se debe utilizarlo.

    En los primeros párrafos hemos visto como utilizar las tres librerías, pero seria posible generar hashing  de forma aleatorio es decir  al azar utilizaría uno de las clases para generar la clave y luego seria guardado en la base de datos.

    He aquí el ejemplo:

    <?php
    //Importando las librerías
    require_once 'Captchaweb/classphp/PasswordLib/PasswordLib.php';
    require_once "Captchaweb/classphp/PasswordHash.Class.php";
    require_once 'Captchaweb/classphp/password_compat/lib/password.php';
    //Generador Clave aleatorio
    function AleatorioClave($Contrasena){
    	$RetorClave=null;
    	$Tipo=null;
    	$Clases=array('PHPASS',
    		          'PHPPasswordLib',
    		          'passwordcompat');
    
    	for($i=0;$i<count($Clases);$i++){
    				$rand=rand(0,count($Clases)-1);
    				$Tipo=$Clases[$rand];
    			}
    	switch ($Tipo) {
    	    case 'PHPASS':
    	      $ecnriptar  = new PasswordHash(8, FALSE);
                  $RetorClave = $ecnriptar->HashPassword($Contrasena);
    	    break;
    	    case 'PHPPasswordLib':
    	      $ecnriptar   = new PasswordLib\PasswordLib();
                  $RetorClave  = $ecnriptar->createPasswordHash($Contrasena);
    	    break;
    	    case 'passwordcompat':
    	      $RetorClave =password_hash($Contrasena, PASSWORD_BCRYPT,array("cost" => 10));
    	    break;
    	    default:
    	    break;
    	}		
        return "HASH generado en: ".$Tipo." => ".$RetorClave;
    }
    //Se muestra la clave generada al azar
    echo AleatorioClave('test123456');

    Para verificar la clave se utilizaría los métodos CheckPassword, verifyPasswordHash y password_verify lo cual es muy simple de escribir. Quizá también usted conozca otras bibliotecas para encriptar contraseñas en PHP puede sugerir en el pie de este articulo.

    Por ultimo es muy importante siempre que se hagan testing  a nuestros aplicaciones web, de esa forma nos aseguramos la buena practica.

    Sobre el autor
    Rodrigo Chambi Q.

    Desarrollador de aplicaciones web y de escritorio, amante de la tecnología y autodidacta, me gusta conocer otras tecnologías, escribir artículos para compartir en la web y para estar al tanto en los nuevos paradigmas, respeto las políticas de software privativo y libre, ya que estas políticas son las normas que permite el desarrollo tecnológico social de la humanidad. filvovmax@gmail.com -- info@gitmedio.com

    Deja una respuesta

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

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

    % Comentario

    1. De maikiavel

      Responder