Laravel Encryption

Laravel
Tempo de leitura: 4 minutos

Laravel Encryption: A Criptografia é um pilar da segurança de dados, garantindo a confidencialidade e a integridade de informações sensíveis. O Laravel fornece uma interface simples e segura através da Facade Crypt, utilizando o algoritmo AES-256 e a extensão OpenSSL do PHP. Este sistema é ideal para criptografar dados que não podem ser armazenados como texto simples, mas que precisam ser reversíveis (ou seja, podem ser descriptografados).

1. 🔑 Configuração da Chave de Criptografia

O Laravel usa uma chave simétrica de 32 caracteres (256 bits) para criptografar e descriptografar dados. Essa chave deve ser mantida secreta e é crucial para a segurança do sistema.

A. Geração da Chave

Se você ainda não tiver uma chave no seu arquivo .env, gere uma usando o Artisan:

Bash

php artisan key:generate
# Este comando preenche a variável APP_KEY no seu arquivo .env

B. Variável de Ambiente

A chave gerada é armazenada na variável APP_KEY do .env:

.ENV

APP_KEY=base64:AbCdEfGhIjKlMnOpQrStUvWxYz0123456789==

Atenção: Se esta chave for comprometida, todos os seus dados criptografados podem ser descriptografados. Nunca a armazene em repositórios públicos.

2. 🛡️ Criptografando Valores

A Facade Crypt oferece métodos estáticos para operações reversíveis.

A. Criptografando Dados Genéricos (Crypt::encrypt)

O método encrypt() aceita qualquer valor (string, array, objeto) e retorna uma string codificada em base64 que contém o valor cifrado, um Initialization Vector (IV) e um Message Authentication Code (MAC).

PHP

use Illuminate\Support\Facades\Crypt;

$private_data = ['credit_card' => '1234567890123456', 'cvv' => '123'];

$encrypted_data = Crypt::encrypt($private_data);

// O resultado é uma string longa, segura e reversível
// Ex: "eyJpdiI6IkhsN..."

B. Criptografando Apenas Strings (Crypt::encryptString)

Este método é um atalho que é otimizado para strings e é útil para tokens ou pequenos pedaços de dados.

PHP

$user_token = Crypt::encryptString($user->id . '|' . now()->timestamp);

3. 🔓 Descriptografando Valores

Para reverter o processo e obter o valor original, use o método correspondente.

A. Descriptografando Dados Genéricos (Crypt::decrypt)

Se o método encrypt() foi usado, use decrypt():

PHP

try {
    // Retorna o array PHP original
    $decrypted_data = Crypt::decrypt($encrypted_data); 
    
    echo $decrypted_data['credit_card'];

} catch (\Illuminate\Contracts\Encryption\DecryptException $e) {
    // Se o valor ou a chave APP_KEY estiverem incorretos, uma exceção é lançada.
    throw new \Exception('Dados de criptografia inválidos.');
}

B. Descriptografando Strings (Crypt::decryptString)

Se o método encryptString() foi usado, use decryptString():

PHP

$decrypted_token = Crypt::decryptString($user_token);
// Resultado: "1|1678886400"

4. 🔗 Criptografia vs. Hashing de Senhas

É crucial entender que a criptografia reversível (Crypt) é diferente do Hashing unidirecional (Hash::make ou bcrypt).

CaracterísticaCriptografia (Crypt)Hashing (Hash / bcrypt)
ReversibilidadeSim (dado original pode ser recuperado)Não (unidirecional)
Uso PrincipalDados sensíveis (ex: tokens de API, informações bancárias)Senhas (nunca devem ser recuperadas)
AlgoritmoAES-256-CBCbcrypt, Argon2

Boas Práticas: Nunca use Crypt::encrypt() ou Crypt::encryptString() para armazenar senhas. Use sempre o hashing seguro (Laravel usa Hash::make() ou o helper bcrypt()).

5. ⚠️ Boas Práticas e Considerações

  1. Chave de Criptografia: Gire a chave anualmente ou sempre que houver suspeita de vazamento (php artisan key:generate).
  2. Model Casting: Para criptografar atributos de um modelo Eloquent automaticamente antes de salvar, use o Casting encrypted (disponível no Laravel 9+).PHP// App\Models\User.php protected $casts = [ 'api_key' => 'encrypted', ];
  3. Consultas (Queries): Evite criptografar colunas que precisam ser pesquisadas via SQL (WHERE name = 'X'), pois o valor cifrado é diferente toda vez e impede a busca direta.

✅ Conclusão Laravel Encryption

Laravel Encryption: A Facade Crypt é a ferramenta do Laravel para adicionar uma camada de confidencialidade aos dados que precisam ser armazenados de forma reversível. Ao usar métodos como encrypt e decrypt, e mantendo a APP_KEY segura, você protege informações sensíveis, garantindo que a segurança dos dados da sua aplicação esteja em conformidade com os padrões modernos.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.