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
- 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. - Geração do IV: O vetor de inicialização (IV) é gerado aleatoriamente e é essencial para a segurança da criptografia.
- Criptografia: A mensagem é criptografada usando
openssl_encrypt()
, que requer a mensagem original, o método, a chave e o IV. - Base64 encoding: A mensagem criptografada e o IV são concatenados e codificados em base64 para facilitar o armazenamento e a transmissão.
- 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.
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:
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Sobre o Autor
0 Comentários