1. Seguridad
  2. Hashing

Introducción

El facade Hash de Laravel proporciona hash seguro Bcrypt y Argon2 para almacenar contraseñas de usuario. Si estás utilizando uno de los kits de inicio de aplicaciones Laravel, Bcrypt se utilizará de forma predeterminada para el registro y la autenticación.

Bcrypt es una excelente elección para el hash de contraseñas porque su "factor de trabajo" es ajustable, lo que significa que el tiempo necesario para generar un hash puede aumentar a medida que aumenta la potencia del hardware. Cuando se trata de hash de contraseñas, más lento es mejor. Cuanto más tiempo tarda un algoritmo en hashear una contraseña, más tiempo tardan los usuarios malintencionados en generar "tablas arcoíris" de todos los valores de hash de cadena posibles que se pueden utilizar en ataques de fuerza bruta contra aplicaciones.

Configuración

El controlador de hash predeterminado para tu aplicación se configura en el archivo de configuración config/hashing.php de tu aplicación. Actualmente hay varios controladores compatibles: Bcrypt y Argon2 (variantes Argon2i y Argon2id).

Uso Básico

Hash de Contraseñas

Puedes hashear una contraseña llamando al método make en el facade Hash:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
 
class PasswordController extends Controller
{
/**
* Actualiza la contraseña del usuario.
*/
public function update(Request $request): RedirectResponse
{
// Valida la longitud de la nueva contraseña...
 
$request->user()->fill([
'password' => Hash::make($request->newPassword)
])->save();
 
return redirect('/profile');
}
}

Ajuste del Factor de Trabajo Bcrypt

Si estás utilizando el algoritmo Bcrypt, el método make te permite gestionar el factor de trabajo del algoritmo utilizando la opción rounds; sin embargo, el factor de trabajo predeterminado gestionado por Laravel es aceptable para la mayoría de las aplicaciones:

$hashed = Hash::make('password', [
'rounds' => 12,
]);

Ajuste del Factor de Trabajo Argon2

Si estás utilizando el algoritmo Argon2, el método make te permite gestionar el factor de trabajo del algoritmo utilizando las opciones memory, time y threads; sin embargo, los valores predeterminados gestionados por Laravel son aceptables para la mayoría de las aplicaciones:

$hashed = Hash::make('password', [
'memory' => 1024,
'time' => 2,
'threads' => 2,
]);

Nota Para obtener más información sobre estas opciones, consulte la documentación oficial de PHP sobre el hash Argon.

Verificación de que una Contraseña Coincide con un Hash

El método check proporcionado por el facade Hash te permite verificar que una cadena de texto plano dada corresponda a un hash dado:

if (Hash::check('plain-text', $hashedPassword)) {
// Las contraseñas coinciden...
}

Determinar si una Contraseña Necesita ser Rehasheada

El método needsRehash proporcionado por el facade Hash te permite determinar si el factor de trabajo utilizado por el hasher ha cambiado desde que se hasheó la contraseña. Algunas aplicaciones eligen realizar esta verificación durante el proceso de autenticación de la aplicación:

if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}