Informática
Calculadora de checksum CRC32, CRC16 e Adler-32
Digite um texto ou cole bytes em hexadecimal: veja de uma vez as somas de verificação mais usadas em redes, arquivos e protocolos industriais, em hexadecimal e decimal, e confira um valor esperado.
Para que servem as checksums
Uma checksum é um número curto calculado a partir dos dados que muda se mudar um único bit. Quem recebe recalcula o valor e o compara com o transmitido: se forem diferentes, os dados se corromperam no caminho. O CRC-32 de “123456789” é CBF43926, o valor de verificação usado para testar uma implementação.
Cada algoritmo tem seu uso. CRC-32 é o do ZIP, do PNG e da Ethernet; CRC-32C o do iSCSI, ext4 e Btrfs; CRC-16/MODBUS o dos equipamentos industriais Modbus RTU; CRC-16/CCITT e XMODEM os de protocolos seriais e cartões; Adler-32 o da compressão zlib, mais rápido, porém mais fraco com dados curtos.
Existem tantas variantes de CRC-16 porque mudam o polinômio, o valor inicial, a reflexão de bits e o XOR final: por isso a mesma mensagem dá resultados diferentes. Se você tem um valor para conferir e não sabe o algoritmo, cole-o no campo do valor esperado e a calculadora procura o que corresponde.
Erros comuns
- Calcular a checksum do texto em vez dos bytes: "0A" como texto são dois caracteres, como hexadecimal um único byte.
- Confundir as variantes de CRC-16: MODBUS, ARC e CCITT dão resultados diferentes com os mesmos dados.
- Usar CRC para conferir downloads de fontes não confiáveis: ele é fácil de falsificar; é preciso SHA-256.
Perguntas frequentes
Por que o CRC do Modbus parece ter os bytes invertidos?
O Modbus transmite o CRC com o byte menos significativo primeiro. Se o valor calculado é 4B37, na mensagem aparecem os bytes 37 4B.
Qual a diferença entre CRC-32 e CRC-32C?
Usam polinômios diferentes: o de Castagnoli (32C) detecta melhor certos erros e tem instruções próprias nos processadores modernos, por isso é preferido em armazenamento e redes rápidas.
Dois arquivos diferentes podem ter a mesma checksum?
Sim: 32 bits dão cerca de 4 bilhões de valores, então colisões por acaso acontecem com muitos arquivos, e criá-las de propósito é trivial.
Como funciona este cálculo
CRC: os dados são tratados como um polinômio sobre bits e divididos por um polinômio gerador; o resto é a checksum. Cada variante é definida por largura, polinômio, valor inicial, reflexão de entrada e saída e XOR final (por exemplo CRC-32: 32 bits, 0x04C11DB7, inicial 0xFFFFFFFF, refletido, XOR 0xFFFFFFFF). Adler-32: A = 1 + soma dos bytes, B = soma dos valores sucessivos de A, ambos módulo 65521, resultado B·65536 + A. Fletcher-16: o mesmo com módulo 255 e sem o 1 inicial.