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 experiência em tecnologia, atuo como Engenheiro de Computação, desenvolvedor de sistemas, escritor e produtor de conteúdo. Minha trajetória passa pelo ensino técnico, desenvolvimento web, arquitetura de sistemas e criação de soluções voltadas para a indústria de jogos digitais. Acredito que conhecimento deve ser acessível e aplicável. Essa visão resultou em uma biblioteca com mais de 550 artigos gratuitos, abrangendo temas como desenvolvimento web, infraestrutura, inteligência artificial, Game Design, mercado de jogos e carreiras na indústria de games. Sou autor do livro "GDD – O Guia Definitivo", uma obra dedicada ao planejamento e documentação de jogos digitais, e criador do GameMeTRix, uma plataforma que auxilia desenvolvedores na análise e validação de ideias para jogos. Meu trabalho busca conectar planejamento, tecnologia e mercado para ajudar criadores a transformar boas ideias em projetos viáveis. Atualmente concentro meus estudos e projetos no desenvolvimento de jogos web, na criação de metodologias para validação de produtos digitais e na produção de conteúdo técnico voltado ao ecossistema de jogos. Meu compromisso é unir teoria, prática e experiência de mercado para contribuir com o crescimento de novos desenvolvedores e profissionais da área.