Laravel - Crittografia

La crittografia è un processo di conversione di un testo normale in un messaggio utilizzando alcuni algoritmi in modo tale che un terzo utente non possa leggere le informazioni. Ciò è utile per la trasmissione di informazioni sensibili perché ci sono meno possibilità che un intruso prenda di mira le informazioni trasferite.

La crittografia viene eseguita utilizzando un processo chiamato Cryptography. Il testo che deve essere crittografato è definito comePlain Text e il testo o il messaggio ottenuto dopo la chiamata della crittografia Cipher Text. Viene chiamato il processo di conversione del testo cifrato in testo normaleDecryption.

Laravel utilizza AES-256 e AES-128encrypter, che utilizza Open SSL per la crittografia. Tutti i valori inclusi in Laravel sono firmati utilizzando il protocolloMessage Authentication Code in modo che il valore sottostante non possa essere manomesso una volta crittografato.

Configurazione

Il comando utilizzato per generare il file key in Laravel è mostrato di seguito -

php artisan key:generate

Tieni presente che questo comando utilizza il generatore di byte casuali sicuri PHP e puoi vedere l'output come mostrato nello screenshot riportato di seguito -

Il comando dato sopra aiuta a generare la chiave che può essere utilizzata nell'applicazione web. Osserva lo screenshot mostrato di seguito -

Nota

I valori per la crittografia sono correttamente allineati nel file config/app.php file, che include due parametri per la crittografia, ovvero key e cipher. Se il valore che utilizza questa chiave non è allineato correttamente, tutti i valori crittografati in Laravel non saranno sicuri.

Processo di crittografia

La crittografia di un valore può essere eseguita utilizzando il encrypt helpernei controllori della classe Laravel. Questi valori vengono crittografati utilizzando OpenSSL e crittografia AES-256. Tutti i valori crittografati sono firmati con il codice MAC (Message Authentication) per verificare eventuali modifiche della stringa crittografata.

Il codice mostrato di seguito è menzionato in un controller e viene utilizzato per memorizzare un messaggio segreto o sensibile.

<?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();
   }
}

Processo di decrittografia

La decrittografia dei valori viene eseguita con il decrypt helper. Rispettare le seguenti righe di codice:

use Illuminate\Contracts\Encryption\DecryptException;

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

Si noti che se il processo di decrittografia non ha esito positivo a causa dell'utilizzo di un MAC non valido, viene generata un'eccezione appropriata.