Articulos publicados: 75 Visitas hoy: 45,102
Aviso del sistema de notificaciones de Pirulug Tech.

Bibliotecas para encriptar contraseñas en PHP

Publicado en Sin categoría por pirulug.

Lectura del Articulo

La criptografía es un campo que debería ser abordado solo por expertos, ya que
muchos tutoriales en línea sugieren métodos obsoletos como MD5 y SHA1 para
almacenar contraseñas, lo cual es una mala práctica.

Problemas con MD5 y SHA1

Algoritmos como MD5 y SHA1 son rápidos y eficientes, pero modernos ataques de
fuerza bruta pueden fácilmente comprometer estos métodos. Por ejemplo:

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

Al ingresar este hash en sitios como md5online o md5cracker, puedes ver que la
contraseña se revela fácilmente.

Recomendaciones para encriptar contraseñas

Es recomendable usar bibliotecas probadas para la encriptación de contraseñas
en PHP, como PHPASS, PHP-PasswordLib, y PasswordCompat. A continuación se
presentan ejemplos de cómo usar cada una.

PHPASS

PHPASS es una biblioteca diseñada por Solar Designer que permite generar
hashes seguros para sistemas de login. Compatible con PHP 5.3 y superior.

<?php 
require_once("PasswordHash.php");
// Instancia de la clase
$encriptar = new PasswordHash(8, FALSE);

// Contraseña
$laClave = "test12345";
// Generando el HASH
$hash = $encriptar->HashPassword($laClave);
// Se imprime el HASH generado
echo 'Hash: ' . $hash . "n";
// Se hace la comparación de la contraseña
if ($encriptar->CheckPassword($laClave, $hash)) {
    echo "La contraseña es correcta";
} else {
    echo "Error al intentar escribir la contraseña";
}
?>
    

PHP-PasswordLib

PHP-PasswordLib es una biblioteca que facilita la generación de hashes con una
simple implementación. Compatible con PHP 5.3.2 y superior.


<?php 
// Importando la librería
require_once 'Captchaweb/classphp/PasswordLib/PasswordLib.php';
// Instancia de la clase
$lib = new PasswordLibPasswordLib();
$Contrasena = "test123456";
// Creando el Hash
$hash = $lib->createPasswordHash($Contrasena);
echo "<strong>HASH: </strong>".$hash."<br>";
// Se verifica la contraseña
if (!$lib->verifyPasswordHash($Contrasena, $hash)) {
    echo "Contraseña incorrecta"; 
} else {
    echo "Contraseña correcta";
}
?>

PasswordCompat

PasswordCompat permite generar hashes de manera sencilla utilizando el método
crypt() de PHP 5.5.0 y superior.

<?php
// Importando la biblioteca
require_once 'Captchaweb/classphp/password_compat/lib/password.php';

$Pasword = "test123456";
// Generando Hash con un costo específico
$Hashgen = password_hash($Pasword, PASSWORD_BCRYPT, array("cost" => 10));
echo "<strong>HASH password_compat: </strong>".$Hashgen."<br>";
// Verificando la contraseña
if (password_verify($Pasword, $Hashgen)) {
    echo "Contraseña válida<br>";  
} else {
    echo "Contraseña no válida<br>"; 
}
?>

Generación Aleatoria de Hashes

Puedes generar hashes aleatorios utilizando diferentes bibliotecas:

<?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 de clave aleatorio
function AleatorioClave($Contrasena) {
    $RetorClave = null;
    $Tipo = null;
    $Clases = array('PHPASS', 'PHPPasswordLib', 'passwordcompat');

    $rand = rand(0, count($Clases) - 1);
    $Tipo = $Clases[$rand];

    switch ($Tipo) {
        case 'PHPASS':
            $encriptar = new PasswordHash(8, FALSE);
            $RetorClave = $encriptar->HashPassword($Contrasena);
            break;
        case 'PHPPasswordLib':
            $encriptar = new PasswordLibPasswordLib();
            $RetorClave = $encriptar->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');
?>

Es crucial realizar pruebas exhaustivas en nuestras aplicaciones web para
asegurar las mejores prácticas de seguridad.

Comentarios de los Lectores (0)

No hay comentarios aun. ¡Se el primero en comentar!

Escribir un Comentario