Como proteger sua aplicação e criptografar dados em PHP

Veja como utilizar a biblioteca libsodium do PHP para armazenar dados criptografados em PHP

23/02/2024

Como proteger sua aplicação e criptografar dados em PHP

Como proteger sua aplicação e criptografar dados em PHP

Introdução

Se sua aplicação PHP armazena dados sensíveis, é fundamental aprender técnicas de criptografia para armazenar informações de forma segura.

É o que veremos neste tutorial, com um exemplo prático de como criptografar e descriptografar dados de cartão de crédito.

Gerando e armazenando sua chave

A chave de criptografia é como uma senha que tranca (criptografa) e destranca (descriptografa) seus dados.

Veja como gerar uma chave segura:

// Gera uma chave binária
$chave = base64_encode(random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES));

// Exibe a chave
echo "Guarde sua chave em local seguro: " . $chave; 

// Lembre-se de armazenar sua chave ($chave) em local seguro

Você jamais deve armazenar a chave de acesso no mesmo local em que armazena os dados criptografados. Por exemplo, se você armazena dados criptografados em um banco de dados, considere guardar a chave em um arquivo armazenado em local protegido.

Como Criptografar Dados

Após ter sua chave de criptografia, o próximo passo é usar essa chave para transformar os dados sensíveis, como informações do cartão de crédito, em uma forma que só pode ser lida por quem tem a chave para descriptografá-la. Isso é feito através de um processo chamado criptografia.

Aqui está como você pode criptografar dados de cartão de crédito usando PHP:

function criptografarDados($chave, $dados) {
    // Decodifica a chave de Base64 para binário
    $chave = base64_decode($chave); 
    // Gera um nonce aleatório
    $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    // Converte os dados para JSON
    $dadosJson = json_encode($dados);
    // Criptografa os dados
    $dadosCriptografados = sodium_crypto_secretbox($dadosJson, $nonce, $chave);
    // Retorna os dados criptografados em Base64, incluindo o nonce
    return base64_encode($nonce . $dadosCriptografados);
}

Para usar essa função, você precisa passar sua chave de criptografia e os dados que deseja criptografar. Veja um exemplo:

// Sua chave de criptografia (deve ser a mesma usada para descriptografar)
$chave = 'sua_chave_aqui';

// Dados do cartão de crédito para criptografar
$dados = [
    'numeroCartao' => '1234 5678 9012 3456',
    'dataVencimento' => '12/25',
    'codigoSeguranca' => '123',
    'nomeTitular' => 'Nome do Titular',
    'bandeira' => 'Visa'
];

// Criptografar os dados
$dadosCriptografados = criptografarDados($chave, $dados);

// Exibe os dados criptografados
echo "Dados Criptografados: " . $dadosCriptografados;

Esses dados criptografados podem agora ser armazenados de forma segura, pois só podem ser lidos por quem tem a chave correta.

Como Descriptografar Dados

Descriptografar é o processo de reverter os dados criptografados de volta à sua forma original, usando a mesma chave que foi utilizada para criptografá-los. Esse processo garante que apenas pessoas autorizadas, que possuem a chave, possam acessar as informações sensíveis.

Aqui está como você pode descriptografar os dados usando PHP:

function descriptografarDados($chaveBase64, $dadosCriptografadosBase64) {
    // Decodifica a chave de Base64 para binário
    $chave = base64_decode($chaveBase64);
    // Decodifica os dados criptografados de Base64 para binário
    $dadosDecodificados = base64_decode($dadosCriptografadosBase64);
    // Extrai o nonce dos dados criptografados
    $nonce = substr($dadosDecodificados, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    // Extrai os dados criptografados
    $dadosCriptografados = substr($dadosDecodificados, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    // Tenta descriptografar os dados
    $dadosJson = sodium_crypto_secretbox_open($dadosCriptografados, $nonce, $chave);
    if ($dadosJson === false) {
        // A descriptografia falhou
        return null;
    }
    // Retorna os dados descriptografados como um array
    return json_decode($dadosJson, true);
}

Para usar essa função, você precisa da chave de criptografia e dos dados criptografados. Veja um exemplo de como descriptografar os dados:


// Sua chave de criptografia (a mesma usada para criptografar)
$chave = 'sua_chave_aqui';

// Dados criptografados (obtidos após a criptografia)
$dadosCriptografados = 'dados_criptografados_aqui';

// Descriptografar os dados
$dadosDescriptografados = descriptografarDados($chave, $dadosCriptografados);

if ($dadosDescriptografados !== null) {
    echo "Dados Descriptografados:\n";
    print_r($dadosDescriptografados);
} else {
    echo "Falha na descriptografia.\n";
}

Após a descriptografia, os dados voltam ao seu formato original e podem ser usados conforme necessário. Este processo assegura que apenas pessoas com acesso à chave correta possam visualizar as informações originais.

Conclusão

Lembre-se de que guardar a chave de criptografia em local seguro é extremamente importante, pois perdê-la significa perder para sempre o acesso aos dados criptografados.

Este artigo nas redes sociais: Facebook, Twitter/X, LinkedIn, Telegram, Pinterest, Tumblr, Flipboard, Mastodon

Domínios hospedados
Clientes satisfeitos