CRC32: não é um hash criptográfico, e nunca foi projetado para ser
CRC32 (Cyclic Redundancy Check, 32 bits) frequentemente aparece listado ao lado de MD5 e SHA como se fosse mais uma opção da mesma categoria — mas é uma ferramenta com propósito de design fundamentalmente diferente. CRC32 foi criado para detectar erros acidentais de transmissão ou armazenamento (um bit invertido por ruído elétrico, um setor de disco corrompido), baseado em divisão polinomial sobre GF(2), a mesma família matemática usada no checksum do payload Pix deste site (que usa CRC16, uma variante menor). Nunca foi projetado para resistir a adulteração deliberada — e é trivialmente contornável por alguém que queira forjar um conteúdo diferente com o mesmo CRC32.
Por que CRC32 é forjável de forma tão mais fácil que MD5 ou SHA-1
Mesmo o MD5 e o SHA-1 — hoje considerados criptograficamente quebrados — exigem esforço computacional real e não-trivial para forjar uma colisão. CRC32 não: sua estrutura matemática linear (é literalmente o resto de uma divisão polinomial) permite calcular, com esforço computacional mínimo, exatamente quais bytes adicionar a um arquivo para fazê-lo produzir qualquer CRC32 alvo desejado — uma técnica documentada e usada, por exemplo, para ocultar payload malicioso dentro de um arquivo ZIP mantendo um checksum "válido" específico. Essa fragilidade não é uma falha recente descoberta por pesquisa — é uma consequência direta e conhecida desde sempre da própria matemática do algoritmo.
Onde CRC32 continua sendo exatamente a ferramenta certa
Para o que foi desenhado — detectar corrupção acidental, não ataque deliberado — CRC32 é rápido, leve, e amplamente suficiente: é o checksum usado no formato ZIP, em Ethernet (verificação de quadro), em PNG (por chunk de imagem) e em inúmeros protocolos de baixo nível onde velocidade de cálculo importa mais que resistência a adversário. A escolha certa de algoritmo depende inteiramente da pergunta "existe alguém tentando enganar deliberadamente esta verificação?" — se a resposta for não, CRC32 é adequado; se for sim, é a ferramenta errada por definição de design, não por implementação falha.