Laravel - Chiffrement

Le cryptage est un processus de conversion d'un texte brut en message à l'aide de certains algorithmes de sorte qu'aucun tiers utilisateur ne puisse lire les informations. Ceci est utile pour transmettre des informations sensibles car il y a moins de chances pour un intrus de cibler les informations transférées.

Le chiffrement est effectué à l'aide d'un processus appelé Cryptography. Le texte qui doit être chiffré est appeléPlain Text et le texte ou le message obtenu après l'appel du cryptage Cipher Text. Le processus de conversion du texte chiffré en texte brut est appeléDecryption.

Laravel utilise AES-256 et AES-128encrypter, qui utilise Open SSL pour le cryptage. Toutes les valeurs incluses dans Laravel sont signées en utilisant le protocoleMessage Authentication Code de sorte que la valeur sous-jacente ne puisse pas être falsifiée une fois qu'elle est chiffrée.

Configuration

La commande utilisée pour générer le key à Laravel est montré ci-dessous -

php artisan key:generate

Veuillez noter que cette commande utilise le générateur d'octets aléatoires sécurisés PHP et vous pouvez voir la sortie comme indiqué dans la capture d'écran ci-dessous -

La commande donnée ci-dessus aide à générer la clé qui peut être utilisée dans l'application Web. Observez la capture d'écran ci-dessous -

Remarque

Les valeurs de chiffrement sont correctement alignées dans le config/app.php fichier, qui comprend deux paramètres de cryptage à savoir key et cipher. Si la valeur utilisant cette clé n'est pas correctement alignée, toutes les valeurs chiffrées dans Laravel ne seront pas sécurisées.

Processus de cryptage

Le chiffrement d'une valeur peut être effectué en utilisant le encrypt helperdans les contrôleurs de la classe Laravel. Ces valeurs sont chiffrées à l'aide d'OpenSSL et du chiffrement AES-256. Toutes les valeurs cryptées sont signées avec le code d'authentification de message (MAC) pour vérifier les modifications de la chaîne cryptée.

Le code ci-dessous est mentionné dans un contrôleur et est utilisé pour stocker un secret ou un message sensible.

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

Processus de décryptage

Le décryptage des valeurs se fait avec le decrypt helper. Observez les lignes de code suivantes -

use Illuminate\Contracts\Encryption\DecryptException;

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

Veuillez noter que si le processus de déchiffrement échoue en raison de l'utilisation d'un MAC non valide, une exception appropriée est levée.