Como usar
- 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.
- Mantenha o CRC-32 para ZIP, gzip e PNG, ou escolha CRC-32C para iSCSI, ext4, Btrfs e Google Cloud Storage.
- Em Saída como, escolha hex (minúsculas), HEX (maiúsculas), Decimal ou Base64.
- 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-32 | CRC-32C (Castagnoli) | |
|---|---|---|
| Polinômio | 0x04C11DB7, refletido 0xEDB88320 | 0x1EDC6F41, refletido 0x82F63B78 |
Valor de verificação de 123456789 | cbf43926 | e3069283 |
| Usado em | ZIP, gzip, PNG, Ethernet | iSCSI, SCTP, metadados do ext4, Btrfs, Google Cloud Storage |
| Suporte em hardware | Instruções CRC32 do ARMv8 | Instruçã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.is | 915d7207 |
你好 | 50a2b841 |
Perguntas frequentes
Qual é o CRC32 de "123456789"?
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?
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?
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.