1. Seguridad
  2. Cifrado

Introducción

Los servicios de cifrado de Laravel proporcionan una interfaz simple y conveniente para cifrar y descifrar texto a través de OpenSSL utilizando cifrado AES-256 y AES-128. Todos los valores cifrados de Laravel están firmados con un código de autenticación de mensajes (MAC) para que su valor subyacente no pueda ser modificado o manipulado una vez cifrado.

Configuración

Antes de usar el encriptador de Laravel, debes establecer la opción de configuración key en tu archivo de configuración config/app.php. Esta opción de configuración se maneja mediante la variable de entorno APP_KEY. Debes usar el comando php artisan key:generate para generar el valor de esta variable, ya que el comando key:generate utilizará el generador de bytes aleatorios seguros de PHP para construir una clave criptográficamente segura para tu aplicación. Típicamente, el valor de la variable de entorno APP_KEY se generará automáticamente durante la instalación de Laravel.

Uso del Encriptador

Cifrar un valor

Puedes cifrar un valor usando el método encryptString proporcionado por la fachada Crypt. Todos los valores cifrados están encriptados usando OpenSSL y el cifrado AES-256-CBC. Además, todos los valores cifrados están firmados con un código de autenticación de mensajes (MAC). El código de autenticación de mensajes integrado evitará la descifrado de cualquier valor que haya sido manipulado por usuarios malintencionados:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
 
class DigitalOceanTokenController extends Controller
{
/**
* Almacena un token de la API de DigitalOcean para el usuario.
*/
public function store(Request $request): RedirectResponse
{
$request->user()->fill([
'token' => Crypt::encryptString($request->token),
])->save();
 
return redirect('/secrets');
}
}

Descifrar un valor

Puedes descifrar valores usando el método decryptString proporcionado por la fachada Crypt. Si el valor no se puede descifrar correctamente, como cuando el código de autenticación de mensajes es inválido, se lanzará una excepción Illuminate\Contracts\Encryption\DecryptException:

use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
 
try {
$decrypted = Crypt::decryptString($encryptedValue);
} catch (DecryptException $e) {
// ...
}