Calculadora de soma de verificação CRC32

Calcule a soma de verificação CRC-32 ou CRC-32C de um texto, de bytes em hex ou de um arquivo inteiro, exiba-a em hex, decimal ou Base64 e compare-a com um valor esperado. Os arquivos são lidos localmente e nunca são enviados.

Todos os algoritmos

Funciona inteiramente no seu navegador. Nada é enviado.

Como usar

  1. Digite ou cole um texto, mude a entrada para Hex para informar bytes brutos ou abra um arquivo para calcular a soma de verificação do conteúdo.
  2. Mantenha o CRC-32 para ZIP, gzip e PNG, ou escolha CRC-32C para iSCSI, ext4, Btrfs e Google Cloud Storage.
  3. Em Saída como, escolha hex (minúsculas), HEX (maiúsculas), Decimal ou Base64.
  4. Para verificar, cole a soma de verificação esperada em Comparar com, em hex sem 0x, em decimal ou em Base64.

O que é uma soma de verificação CRC32

A verificação de redundância cíclica (CRC) trata a entrada como um único polinômio binário longo, divide-o por um polinômio gerador fixo e guarda o resto. No CRC-32, o resto tem 32 bits e costuma ser escrito como 8 dígitos hex ou como um número sem sinal de 0 a 4.294.967.295. Quase qualquer alteração nos dados muda o resto.

Os CRCs são projetados para os erros que cabos, rádios e discos reais produzem. O CRC-32 detecta qualquer rajada de bits corrompidos com até 32 bits de extensão, e uma corrupção aleatória só passa despercebida cerca de uma vez em 4,3 bilhões de casos. Ele também é muito rápido de calcular, e é por isso que está embutido no ZIP, no gzip, no PNG e nos quadros Ethernet.

CRC-32 e CRC-32C

CRC-32CRC-32C (Castagnoli)
Polinômio0x04C11DB7, refletido 0xEDB883200x1EDC6F41, refletido 0x82F63B78
Valor de verificação de 123456789cbf43926e3069283
Usado emZIP, gzip, PNG, EthernetiSCSI, SCTP, metadados do ext4, Btrfs, Google Cloud Storage
Suporte em hardwareInstruções CRC32 do ARMv8Instrução crc32 do SSE4.2 (x86), ARMv8

Os dois começam em 0xFFFFFFFF, processam os bits de cada byte a partir do menos significativo e invertem o valor final; só o polinômio muda, então os mesmos dados geram dois resultados sem relação entre si. O primeiro é o que a maioria das ferramentas chama de "CRC32" e está catalogado como CRC-32/ISO-HDLC. O CRC-32C foi adotado mais tarde por protocolos de armazenamento e de rede por detectar erros melhor. O Google Cloud Storage informa o CRC-32C, e o Amazon S3 qualquer uma das duas variantes, como Base64 dos quatro bytes em ordem big-endian, que é exatamente o que a saída Base64 mostra.

Uma soma de verificação, não uma verificação de segurança

Um CRC protege contra acidentes, não contra ataques. Ele é uma função linear, então qualquer pessoa pode modificar um arquivo e depois ajustar quatro bytes para manter o CRC-32 inalterado. Um CRC que confere, portanto, não prova nada sobre adulteração deliberada. Para verificar um download, compare um hash SHA-256 obtido de uma fonte confiável; para provar quem enviou uma mensagem, use um HMAC.

Além disso, 32 bits são poucos demais para identificar dados. Entre cerca de 77.000 arquivos aleatórios, a chance de dois terem o mesmo CRC-32 já chega a 50%, então não o use como ID único nem como chave de deduplicação. Quando não há atacante envolvido, o MD5 ou o SHA-256 servem muito melhor como impressão digital.

CRC32 no código

# Python: zlib.crc32 não tem sinal no Python 3;
# "& 0xffffffff" só é necessário no Python 2
import zlib
format(zlib.crc32(b'123456789'), '08x')    # 'cbf43926'

// Node.js 20.15+ e 22.2+
require('zlib').crc32('123456789').toString(16).padStart(8, '0')   // 'cbf43926'

// Go (import "hash/crc32")
crc32.ChecksumIEEE(data)                                   // CRC-32
crc32.Checksum(data, crc32.MakeTable(crc32.Castagnoli))    // CRC-32C

// Java: java.util.zip.CRC32 e, desde o Java 9, java.util.zip.CRC32C

// PHP
sprintf('%08x', crc32('123456789'));   // 'cbf43926'
hash('crc32b', '123456789');           // 'cbf43926', o mesmo CRC-32
hash('crc32c', '123456789');           // 'e3069283'
hash('crc32', '123456789');            // '181989fc', outro CRC

Atenção aos nomes no PHP: o algoritmo de hash chamado crc32 não é a soma de verificação do ZIP, e sim o CRC usado pelo bzip2, exibido em ordem de bytes invertida. Use crc32b ou a função crc32() para obter o mesmo resultado do ZIP, do gzip e desta ferramenta. O comando Unix cksum usa ainda outra variante, que também incorpora o tamanho do arquivo, então o número dele não vai coincidir com nenhum dos dois.

Exemplos

Entrada (UTF-8)CRC-32
Hello, World!ec4ac3d0
Base64.is915d7207
你好50a2b841

Perguntas frequentes

Qual é o CRC32 de "123456789"?
Essa string é a entrada de teste padrão dos algoritmos CRC. O CRC-32 dela é cbf43926 (3421780262 em decimal) e o CRC-32C é e3069283. Se a sua própria implementação retorna esses valores, ela usa os mesmos parâmetros desta ferramenta.
Por que meu CRC32 é diferente do de outra ferramenta?
Verifique quatro coisas: a variante (CRC-32, CRC-32C, o CRC do bzip2 e o cksum do POSIX dão resultados diferentes), os bytes de entrada (finais de linha, uma quebra de linha no final, a codificação de texto), o formato numérico (algumas linguagens retornam um inteiro de 32 bits com sinal, o que torna negativos os valores grandes) e a ordem dos bytes.
Por que os bytes do CRC aparecem invertidos dentro do meu arquivo ZIP ou gzip?
O ZIP e o gzip armazenam o CRC-32 em ordem de bytes little-endian, então um editor hexadecimal mostra os quatro bytes na ordem inversa da notação usual. O PNG o armazena em big-endian. Esta ferramenta, o unzip -v e a maioria dos outros programas exibem primeiro o byte mais significativo.
Posso calcular o CRC32 de um arquivo grande?

Sim. Clique em Abrir arquivo e a soma de verificação é calculada a partir dos bytes do arquivo no seu dispositivo, sem enviá-lo; funciona com qualquer arquivo que caiba na memória do navegador. Depois, você pode comparar o resultado com o valor de um arquivo SFV ou de uma listagem do ZIP.

O CRC32 é uma função de hash?

Ele mapeia dados de qualquer tamanho para um valor fixo de 32 bits, por isso costuma ser listado junto com os hashes, mas é uma soma de verificação: detecta erros acidentais e não oferece proteção contra alguém que altere os dados de propósito. Quando você precisar de uma impressão digital mais forte, a tabela Todos os algoritmos, abaixo do resultado, mostra o MD5 e a família SHA para a mesma entrada.