1. O Que Sao Checksums
Um checksum e um valor numerico calculado a partir de um conjunto de dados para verificar sua integridade. Quando voce faz o download de um arquivo, o checksum permite confirmar que ele chegou sem corrupcao โ basta recalcular o checksum localmente e comparar com o valor divulgado pelo distribuidor.
Checksums nao sao funcoes de hash criptograficas (como SHA-256). Eles sao projetados para velocidade e deteccao de erros acidentais, nao para resistencia a adulteracao intencional.
2. CRC32: Historia e Usos
O CRC32 (Cyclic Redundancy Check de 32 bits) e um dos checksums mais usados da historia da computacao. Ele aparece em:
- Formato ZIP: cada entrada de arquivo inclui um CRC32 para deteccao de corrupcao.
- PNG: cada chunk do formato PNG e protegido por CRC32.
- Ethernet: o frame check sequence (FCS) usa CRC32.
- gzip/zlib: usado para verificar integridade dos dados comprimidos.
O CRC32 usa uma tabela de lookup precomputada de 256 entradas para calcular o valor em O(n), onde n e o tamanho dos dados.
3. Adler-32 e Fletcher
O Adler-32 foi criado por Mark Adler e e usado no formato zlib. Ele mantem duas somas acumuladas (A e B) calculadas modulo 65521 (o maior primo menor que 65536). E mais rapido que CRC32 mas ligeiramente menos robusto para dados pequenos.
O Fletcher (em suas variacoes de 16 e 32 bits) tambem usa duas somas, mas com modulo 255 e 65535 respectivamente. O Fletcher-32 e usado em protocolos de rede como o SCTP.
4. Diferencas Entre os Algoritmos
Cada algoritmo tem caracteristicas distintas de velocidade, tamanho do resultado e qualidade de deteccao:
- CRC32: 32 bits, alta qualidade de deteccao, polinomio padronizado, mais lento que Fletcher/Adler para implementacoes sem hardware.
- Adler-32: 32 bits, muito rapido, boa deteccao para dados medios/grandes, fraco para strings muito curtas.
- Fletcher-16: 16 bits, rapido, adequado para sistemas embarcados com restricoes de memoria.
- Fletcher-32: 32 bits, equilibrio entre velocidade e qualidade de deteccao.
"Para verificacao de integridade de arquivos em downloads e distribuicao de software, CRC32 e a escolha historicamente dominante โ presente em ZIP, gzip, PNG e protocolos Ethernet."
5. Casos de Uso Praticos
Desenvolvedores e profissionais de infraestrutura usam checksums em varios cenarios:
- Verificacao de download: confirmar que um arquivo baixado nao foi corrompido na transferencia.
- Deteccao de duplicatas: comparar rapidamente se dois arquivos sao identicos sem ler byte a byte.
- Cache e invalidacao: usar o checksum como chave de cache para detectar mudancas em recursos.
- Protocolos de comunicacao: validar a integridade de pacotes em sistemas embarcados e redes.
- Debug de serialization: verificar se um objeto serializado manteve sua estrutura apos desserializacao.
6. Perguntas Frequentes
CRC32 e seguro para verificar integridade de arquivos sensiveis?
Nao para seguranca. CRC32 nao e criptograficamente seguro โ e possivel gerar intencionalmente uma colisao. Para verificar integridade de software e arquivos contra adulteracao, use SHA-256 ou SHA-512.
Por que o mesmo texto gera valores diferentes no CRC32 e Adler-32?
Cada algoritmo usa uma funcao matematica diferente. O CRC32 usa divisao polinomial com o polinomio 0xEDB88320, enquanto o Adler-32 usa somas acumuladas modulo 65521. Sao abordagens distintas para o mesmo objetivo.
Os dados sao enviados para algum servidor?
Nao. Todo o processamento acontece localmente no seu navegador via JavaScript. Nem texto nem arquivos sao enviados para nenhum servidor.