Fingerprinting de Arquivos com Hashing em PHP
Como usar funções de hash nativas para identificar mudanças em arquivos grandes de forma eficiente.
🕵️ Fingerprinting de Arquivos (Chunking)
Você não precisa implementar algoritmos complexos como Rabin-Karp "na mão" para tudo. O PHP possui funções de hash extremamente rápidas que podem ser usadas para Chunking e identificação de mudanças em arquivos.
Se você precisa verificar se um arquivo grande mudou, mas não quer ler ele todo de novo para comparar byte a byte, você pode dividi-lo em blocos e hashear os blocos.
📝 O Código
<?php
// Trick: Usando hash nativo para simular a ideia de "assinatura" de blocos
// Isso é muito usado em sistemas de backup (como rsync)
function getFileSignature($content, $chunkSize = 16) {
$chunks = str_split($content, $chunkSize);
$signature = [];
foreach ($chunks as $chunk) {
// crc32 é super rápido para checksums curtos
$signature[] = dechex(crc32($chunk));
}
return implode("-", $signature);
}
$arquivoV1 = "Config: true; Mode: Dev;";
$arquivoV2 = "Config: true; Mode: Prd;";
echo "Assinatura V1: " . getFileSignature($arquivoV1, 8) . "\n";
echo "Assinatura V2: " . getFileSignature($arquivoV2, 8) . "\n";
// Saída esperada
// Assinatura V1: 8e335131-bb4f918f-1e29e850
// Assinatura V2: 8e335131-bb4f918f-a0cfedbe
💡 Por que isso é útil?
Perceba que apenas o último bloco mudou. Isso permite que você identifique onde a mudança ocorreu sem reprocessar ou retransmitir o arquivo inteiro, economizando recursos preciosos em sincronizações de rede ou backups incrementais.