23/02/2024
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.
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.
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.
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.
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.