Bibliotecas para encriptar contraseñas en PHP
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 PasswordLib\PasswordLib();
$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 PasswordLib\PasswordLib();
$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.
asdasd
Este comentario ha sido eliminado por el autor.