Criptografia em PHP: criptografia e hashing — guia prático

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Criptografia em PHP: criptografia e hashing de dados



A segurança de aplicações web é uma das principais tarefas do desenvolvedor. O PHP oferece ferramentas integradas poderosas para proteção criptográfica de dados. Neste artigo, abordaremos duas direções principais: criptografia (transformação de dados com possibilidade de recuperação reversa) e hashing (transformação unidirecional para verificação de integridade).



1. Hashing em PHP



O hashing é usado para armazenar senhas, somas de verificação e verificar a integridade dos dados. Em PHP, as funções password_hash() e hash() são usadas para esses fins.



1.1. Hashing seguro de senhas



Nunca use md5 ou sha1 para armazenar senhas. Use o algoritmo bcrypt através de password_hash():



<?php// Hashing de senha$password = 'MySecureP@ss123';$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);

echo $hash; // $2y$12$...

// Verificação de senhaif (password_verify('MySecureP@ss123', $hash)) { echo "Senha correta!";} else { echo "Senha incorreta!";}?>


A função password_hash() gera automaticamente um salt e usa um algoritmo seguro. O parâmetro cost ajusta a complexidade computacional (recomendado 10-12).



1.2. Hashing de dados arbitrários



Para verificar a integridade de arquivos ou dados, use os algoritmos SHA-256 ou SHA-3:



<?php$data = "Dados importantes para verificação";$hash_sha256 = hash('sha256', $data);$hash_sha3_256 = hash('sha3-256', $data);

echo "SHA-256: " . $hash_sha256 . PHP_EOL;echo "SHA3-256: " . $hash_sha3_256 . PHP_EOL;

// Verificação de integridade de arquivo$file_hash = hash_file('sha256', '/path/to/file.zip');echo "Hash do arquivo: " . $file_hash;?>


2. Criptografia simétrica em PHP



A criptografia simétrica usa uma única chave para criptografar e descriptografar dados. O PHP suporta OpenSSL e Sodium.



2.1. Criptografia via OpenSSL (AES-256-GCM)



O modo recomendado é AES-256-GCM, que fornece autenticação de dados:



<?php$data = "Mensagem secreta";$key = random_bytes(32); // Chave de 256 bits$iv = random_bytes(12);  // Vetor de inicialização de 96 bits

// Criptografia$encrypted = openssl_encrypt( $data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);

// Descriptografia$decrypted = openssl_decrypt( $encrypted, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);

echo "Dados originais: " . $data . PHP_EOL;echo "Descriptografados: " . $decrypted . PHP_EOL;echo "Tag de autenticação: " . bin2hex($tag);?>


Importante: armazene $key e $iv (ou sua combinação) para descriptografia. A tag $tag verifica a integridade dos dados.



2.2. Criptografia via Sodium (libsodium)



A partir do PHP 7.2, o Sodium faz parte do núcleo. É mais simples e seguro:



<?php$data = "Informação confidencial";$key = sodium_crypto_secretbox_keygen(); // Geração de chave$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

// Criptografia$ciphertext = sodium_crypto_secretbox($data, $nonce, $key);

// Descriptografia$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);

echo "Criptografado: " . base64_encode($ciphertext) . PHP_EOL;echo "Descriptografado: " . $decrypted . PHP_EOL;

// Limpeza de memóriasodium_memzero($key);?>


3. Criptografia assimétrica (RSA)



A criptografia assimétrica usa um par de chaves (pública/privada). É usada para transmissão segura de dados:



<?php// Geração de chaves$config = [    'private_key_bits' => 2048,    'private_key_type' => OPENSSL_KEYTYPE_RSA,                    

Recommendations