#Introducción
El Hash facade de Laravel proporciona hashing seguro con Bcrypt y Argon2 para almacenar contraseñas de usuarios. Si está utilizando uno de los starter kits de aplicaciones Laravel, Bcrypt se usará por defecto para el registro y la autenticación.
Bcrypt es una excelente opción para hashear contraseñas porque su "factor de trabajo" es ajustable, lo que significa que el tiempo que tarda en generar un hash puede incrementarse conforme aumenta la potencia del hardware. Al hashear contraseñas, la lentitud es buena. Cuanto más tiempo tarda un algoritmo en hashear una contraseña, más tiempo les toma a usuarios malintencionados generar "tablas rainbow" con todos los posibles valores hash de cadenas que podrían usarse en ataques de fuerza bruta contra aplicaciones.
#Configuración
El driver de hashing predeterminado para su aplicación se configura en el archivo de configuración config/hashing.php de su aplicación. Actualmente hay varios drivers soportados: Bcrypt y Argon2 (variantes Argon2i y Argon2id).
#Uso básico
#Hash de contraseñas
Puede 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
{
/**
* Actualizar la contraseña del usuario.
*/
public function update(Request $request): RedirectResponse
{
// Validar la longitud de la nueva contraseña...
$request->user()->fill([
'password' => Hash::make($request->newPassword)
])->save();
return redirect('/profile');
}
}
#Ajustar el factor de trabajo de Bcrypt
Si está usando el algoritmo Bcrypt, el método make le permite gestionar el factor de trabajo del algoritmo usando la opción rounds; sin embargo, el factor de trabajo predeterminado gestionado por Laravel es adecuado para la mayoría de las aplicaciones:
$hashed = Hash::make('password', [
'rounds' => 12,
]);
#Ajustar el factor de trabajo de Argon2
Si está usando el algoritmo Argon2, el método make le permite gestionar el factor de trabajo del algoritmo usando las opciones memory, time y threads; sin embargo, los valores predeterminados gestionados por Laravel son adecuados para la mayoría de las aplicaciones:
$hashed = Hash::make('password', [
'memory' => 1024,
'time' => 2,
'threads' => 2,
]);
Para más información sobre estas opciones, por favor consulte la documentación oficial de PHP sobre hashing Argon.
#Verificar que una contraseña coincide con un hash
El método check proporcionado por el facade Hash le permite verificar que una cadena de texto plano corresponde 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 le permite determinar si el factor de trabajo usado por el hasher ha cambiado desde que la contraseña fue hasheada. Algunas aplicaciones eligen realizar esta verificación durante el proceso de autenticación:
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}