Laravel - Cifrado

El cifrado es un proceso de conversión de un texto sin formato en un mensaje utilizando algunos algoritmos de modo que ningún tercer usuario no pueda leer la información. Esto es útil para transmitir información confidencial porque hay menos posibilidades de que un intruso apunte a la información transferida.

El cifrado se realiza mediante un proceso llamado Cryptography. El texto que se va a cifrar se denominaPlain Text y el texto o el mensaje obtenido después de la encriptación se llama Cipher Text. El proceso de convertir texto cifrado en texto sin formato se llamaDecryption.

Usos de Laravel AES-256 y AES-128cifrador, que utiliza Open SSL para el cifrado. Todos los valores incluidos en Laravel están firmados usando el protocoloMessage Authentication Code para que el valor subyacente no se pueda alterar una vez que esté cifrado.

Configuración

El comando utilizado para generar el key en Laravel se muestra a continuación -

php artisan key:generate

Tenga en cuenta que este comando utiliza el generador de bytes aleatorios seguros de PHP y puede ver el resultado como se muestra en la captura de pantalla que se muestra a continuación:

El comando dado anteriormente ayuda a generar la clave que se puede usar en la aplicación web. Observe la captura de pantalla que se muestra a continuación:

Nota

Los valores de cifrado están correctamente alineados en el config/app.php archivo, que incluye dos parámetros para el cifrado, a saber key y cipher. Si el valor que usa esta clave no está alineado correctamente, todos los valores encriptados en Laravel serán inseguros.

Proceso de cifrado

El cifrado de un valor se puede realizar mediante el encrypt helperen los controladores de la clase Laravel. Estos valores se cifran mediante cifrado OpenSSL y AES-256. Todos los valores cifrados están firmados con el código de autenticación de mensajes (MAC) para comprobar si hay modificaciones en la cadena cifrada.

El código que se muestra a continuación se menciona en un controlador y se utiliza para almacenar un mensaje secreto o confidencial.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class DemoController extends Controller{
   **
      * Store a secret message for the user.
      *
      * @param Request $request
      * @param int $id
      * @return Response
   */
   
   public function storeSecret(Request $request, $id) {
      $user = User::findOrFail($id);
      $user->fill([
         'secret' => encrypt($request->secret)
      ])->save();
   }
}

Proceso de descifrado

El descifrado de los valores se realiza con el decrypt helper. Observe las siguientes líneas de código:

use Illuminate\Contracts\Encryption\DecryptException;

// Exception for decryption thrown in facade
try {
   $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
   //
}

Tenga en cuenta que si el proceso de descifrado no tiene éxito debido a que se está utilizando una MAC no válida, se lanza una excepción apropiada.