Documentación de Laravel 10.x
Aquí encontrarás fragmentos de código de Laravel y consejos útiles sobre desarrollo web.
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.
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).
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'); }}
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,]);
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.
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...}
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');}