Criptografia com OpenSSL em PHP

A segurança dos dados é uma preocupação fundamental no desenvolvimento web. A criptografia é uma das técnicas mais eficazes para proteger informações sensíveis. O PHP oferece suporte à criptografia através da extensão OpenSSL, permitindo que você encripte e desencripte dados de maneira eficiente. Neste post, vamos explorar como usar OpenSSL em PHP para criptografar e descriptografar dados.

O que é OpenSSL?

OpenSSL é uma biblioteca de software que fornece ferramentas e funções para implementar criptografia e segurança de dados. Ela suporta diversos algoritmos de criptografia simétrica e assimétrica, além de fornecer funcionalidades para gerar chaves, criar certificados e muito mais.

Instalando OpenSSL no PHP

A maioria das distribuições do PHP já vêm com a extensão OpenSSL habilitada por padrão. Você pode verificar se a extensão está habilitada criando um arquivo phpinfo.php com o seguinte conteúdo:

<?php
phpinfo();
?>

Procure pela seção “OpenSSL” na saída. Se não estiver habilitado, você pode ativá-lo editando o arquivo php.ini e descomentando (ou adicionando) a linha:

extension=openssl

Depois de fazer as alterações, reinicie seu servidor web.

Criptografia simétrica com OpenSSL

Na criptografia simétrica, a mesma chave é usada para encriptação e desencriptação. Vamos ver como usar OpenSSL para realizar criptografia simétrica em PHP.

Exemplo de criptografia simétrica

Veja um exemplo simples de como encriptar e desencriptar dados usando a função openssl_encrypt() e openssl_decrypt():

<?php
// Definindo a chave e o método de criptografia
$chave = 'minha-chave-secreta'; // Deve ter 16, 24 ou 32 bytes de comprimento
$método = 'AES-256-CBC';

// Mensagem a ser criptografada
$mensagem = 'Esta é uma mensagem secreta.';

// Gerando um vetor de inicialização (IV) aleatório
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($método));

// Criptografando a mensagem
$mensagemCriptografada = openssl_encrypt($mensagem, $método, $chave, 0, $iv);

// Codificando o resultado em base64 para facilitar o armazenamento
$mensagemCriptografadaBase64 = base64_encode($mensagemCriptografada . '::' . $iv);

// Exibindo a mensagem criptografada
echo "Mensagem Criptografada: " . $mensagemCriptografadaBase64 . "<br>";

// Para desencriptar, precisamos separar o IV e a mensagem
list($mensagemCriptografada, $iv) = explode('::', base64_decode($mensagemCriptografadaBase64), 2);

// Desencriptando a mensagem
$mensagemDesencriptada = openssl_decrypt($mensagemCriptografada, $método, $chave, 0, $iv);

// Exibindo a mensagem desencriptada
echo "Mensagem Desencriptada: " . $mensagemDesencriptada;
?>

Explicação do código

  1. Definição da chave e método: A chave deve ter um tamanho adequado dependendo do método de criptografia escolhido. O método AES-256-CBC é um dos mais comuns.

  2. Geração do IV: O vetor de inicialização (IV) é gerado aleatoriamente e é essencial para a segurança da criptografia.

  3. Criptografia: A mensagem é criptografada usando openssl_encrypt(), que requer a mensagem original, o método, a chave e o IV.

  4. Base64 encoding: A mensagem criptografada e o IV são concatenados e codificados em base64 para facilitar o armazenamento e a transmissão.

  5. Desencriptação: Para desencriptar, o IV e a mensagem criptografada são separados e a função openssl_decrypt() é utilizada.

Criptografia assimétrica com OpenSSL

Na criptografia assimétrica, são usadas duas chaves: uma pública e uma privada. Aqui está um exemplo de como gerar um par de chaves e realizar criptografia assimétrica:

Exemplo de criptografia assimétrica

<?php
// Gerando um par de chaves
$chaves = openssl_pkey_new(['private_key_bits' => 2048]);
openssl_pkey_export($chaves, $chavePrivada);
$chavePublica = openssl_pkey_get_details($chaves)['key'];

// Mensagem a ser criptografada
$mensagem = 'Esta é uma mensagem secreta para criptografia assimétrica.';

// Criptografando a mensagem com a chave pública
openssl_public_encrypt($mensagem, $mensagemCriptografada, $chavePublica);

// Codificando a mensagem criptografada em base64
$mensagemCriptografadaBase64 = base64_encode($mensagemCriptografada);

// Exibindo a mensagem criptografada
echo "Mensagem Criptografada com Chave Pública: " . $mensagemCriptografadaBase64 . "<br>";

// Desencriptando a mensagem com a chave privada
openssl_private_decrypt(base64_decode($mensagemCriptografadaBase64), $mensagemDesencriptada, $chavePrivada);

// Exibindo a mensagem desencriptada
echo "Mensagem Desencriptada com Chave Privada: " . $mensagemDesencriptada;
?>

Considerações de segurança

  • Proteja suas chaves: Nunca exponha suas chaves privadas em código ou repositórios públicos. Armazene-as de forma segura.

  • Escolha algoritmos fortes: Sempre utilize algoritmos de criptografia atualizados e bem avaliados.

  • Use IVs aleatórios: Sempre gere vetores de inicialização aleatórios para evitar padrões previsíveis

A criptografia com OpenSSL em PHP é uma maneira eficaz de proteger dados sensíveis.

Neste post, exploramos como implementar criptografia simétrica e assimétrica, fornecendo exemplos práticos para ajudá-lo a começar. Sempre tenha em mente as melhores práticas de segurança ao lidar com criptografia para garantir que seus dados permaneçam protegidos.

QUER APRENDER PHP ORIENTADO A OBJETOS OU APERFEIÇOAR O QUE JÁ SABE?

Então conheça o curso online que já ajudou milhares de pessoas a aprender a programar e desenvolver seus próprios projetos do ZERO e usando orientação a objetos de uma forma fácil de entender.

CLIQUE NA IMAGEM ABAIXO E SAIBA MAIS:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags:

Sobre o Autor

Benedito Silva Júnior
Benedito Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *