Laravel - Encriptação

A criptografia é um processo de conversão de um texto simples em uma mensagem usando alguns algoritmos de forma que nenhum terceiro usuário possa ler as informações. Isso é útil para transmitir informações confidenciais porque há menos chances de um intruso mirar nas informações transferidas.

A criptografia é realizada usando um processo chamado Cryptography. O texto que deve ser criptografado é denominado comoPlain Text e o texto ou a mensagem obtida após a criptografia é chamada Cipher Text. O processo de conversão de texto cifrado em texto simples é chamadoDecryption.

Laravel usa AES-256 e AES-128criptografador, que usa Open SSL para criptografia. Todos os valores incluídos no Laravel são assinados usando o protocoloMessage Authentication Code para que o valor subjacente não possa ser violado depois de criptografado.

Configuração

O comando usado para gerar o key no Laravel é mostrado abaixo -

php artisan key:generate

Observe que este comando usa o gerador de bytes aleatórios seguros do PHP e você pode ver a saída conforme mostrado na captura de tela fornecida abaixo -

O comando fornecido acima ajuda a gerar a chave que pode ser usada no aplicativo da web. Observe a imagem mostrada abaixo -

Nota

Os valores para criptografia estão devidamente alinhados no config/app.php arquivo, que inclui dois parâmetros de criptografia, a saber key e cipher. Se o valor usando esta chave não estiver alinhado corretamente, todos os valores criptografados no Laravel serão inseguros.

Processo de criptografia

A criptografia de um valor pode ser feita usando o encrypt helpernos controladores da classe Laravel. Esses valores são criptografados usando cifra OpenSSL e AES-256. Todos os valores criptografados são assinados com o código de autenticação de mensagem (MAC) para verificar se há modificações na string criptografada.

O código mostrado abaixo é mencionado em um controlador e é usado para armazenar um segredo ou uma mensagem sensível.

<?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 de descriptografia

A descriptografia dos valores é feita com o decrypt helper. Observe as seguintes linhas de código -

use Illuminate\Contracts\Encryption\DecryptException;

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

Observe que se o processo de descriptografia não for bem-sucedido devido ao uso de MAC inválido, uma exceção apropriada será lançada.