Introducción
El facade Hash
de Laravel proporciona hashing seguro de Bcrypt y Argon2 para almacenar contraseñas de usuarios. Si estás usando las clases integradas LoginController
y RegisterController
que están incluidas con tu aplicación de Laravel, usarán Bcrypt para registro y autenticación de forma predeterminada.
Bcrypt es una buena opción para el hashing de contraseñas dado que su «factor de trabajo» es ajustable, lo que quiere decir que el tiempo que toma generar un hash puede ser aumentado a medida que la capacidad de hardware incrementa.
Configuración
El driver de hashing por defecto para tu aplicación está configurado en el archivo de configuración config/hashing.php
. Actualmente hay tres drivers soportados: Bcrypt y Argon2 (variantes Argon2i y Argon2id).
El driver Argon2i requiere PHP 7.2.0 o superior y el driver Argon2id requiere PHP 7.3.0 o superior.
Uso básico
Puedes hacer hash a una contraseña llamando al método make
en el facade Hash
:
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; class UpdatePasswordController extends Controller { /** * Update the password for the user. * * @param Request $request * @return Response */ public function update(Request $request) { // Validate the new password length... $request->user()->fill([ 'password' => Hash::make($request->newPassword) ])->save(); } }
Ajustando el factor de trabajo de Bcrypt
Si estás usando el algoritmo Bcrypt, el método make
te permite administrar el factor de trabajo del algoritmo usando la opción rounds
; sin embargo, el valor por defecto es aceptable para la mayoría de las aplicaciones:
$hashed = Hash::make('password', [ 'rounds' => 12 ]);
Ajustando el factor de trabajo de Argon2
Si estás usando el algoritmo de Argon2, el método make
te permite administrar el factor de trabajo del algoritmo usando las opciones memory
, time
y threads
; sin embargo, los valores por defecto son aceptables para la mayoría de las aplicaciones:
$hashed = Hash::make('password', [ 'memory' => 1024, 'time' => 2, 'threads' => 2, ]);
Para mayor información de estas opciones, revisa la documentación oficial de PHP.
Verificando una contraseña contra un hash
El método check
te permite verificar que una cadena de texto plano dada corresponde a un hash dado. Sin embargo, si estás usando el LoginController
incluido con Laravel, probablemente no necesitarás usar esto directamente, ya que este controlador automáticamente llama a este método:
if (Hash::check('plain-text', $hashedPassword)) { // The passwords match... }
Comprobando si una contraseña necesita un nuevo hash
La función needsRehash
te permite determinar si el factor de trabajo usado por el hasher ha cambiado desde que el hash fue agregado a la contraseña:
if (Hash::needsRehash($hashed)) { $hashed = Hash::make('plain-text'); }
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Cifrado - Documentación de Laravel 6 Lección siguiente Restablecimiento de contraseñas - Documentación de Laravel 6