Também disponível em: English · Español · Français · العربية
Calculadora CRC
Calcule um CRC com qualquer um dos 113 algoritmos do catálogo padrão — e descubra o que o seu formato realmente quer dizer com CRC-32.
O que é um CRC
Uma verificação de redundância cíclica é um número curto calculado a partir de um bloco de dados para que quem o recebe saiba se ele chegou intacto. Não é um hash nem uma assinatura: foi feito para pegar os acidentes que transmissão e armazenamento produzem — bits invertidos, bytes perdidos, um quadro truncado — e é tão barato que Ethernet, zip, PNG, gzip e uma porção de barramentos de hardware calculam um sobre tudo que passa.
O importante é entender que um CRC não é um algoritmo. É uma família descrita por seis parâmetros: a largura do registrador, o polinômio, com o que o registrador começa, se os bits de entrada são refletidos, se os de saída são, e um valor aplicado com XOR no fim. Mude qualquer um e você tem um CRC diferente e igualmente válido. O catálogo padrão lista 113 realmente em uso, de três bits de largura a oitenta e dois.
Esta calculadora implementa o algoritmo parametrizado e traz todos os 113, então você pode calcular aquele que o seu formato de fato especifica, e não o que alguma biblioteca resolveu chamar de CRC-32.
Como usar
- Informe a sua entrada. Texto por padrão, ou mude para bytes hexadecimais se estiver trabalhando a partir de um dump de pacotes. O padrão é a string 123456789, que é o vetor de teste do próprio catálogo, então o primeiro resultado que você vê pode ser conferido na tabela publicada.
- Escolha o algoritmo. Busque por nome, por apelido ou por polinômio. Digitar CRC-32 leva a ISO-HDLC, que é o que esse nome puro significa, e digitar um polinômio traz tudo que o usa.
- Veja o painel de comparação. Quando o algoritmo escolhido compartilha o polinômio com outros, todos aparecem com o que cada um devolve para a sua entrada. Costuma ser o jeito mais rápido de descobrir qual o sistema que você está depurando realmente usa.
Cinco algoritmos diferentes se chamam CRC-32
Doze dos algoritmos catalogados têm trinta e dois bits, e cinco deles compartilham o polinômio 0x04C11DB7: ISO-HDLC, BZIP2, CKSUM, JAMCRC e MPEG-2. Diferem apenas no registrador inicial, nas flags de reflexão e no XOR final — e devolvem cinco números diferentes para a mesma entrada. Sobre a string 123456789 dão 0xCBF43926, 0xFC891918, 0x765E7680, 0x340BC6D9 e 0x0376E6E7, respectivamente.
O catálogo lista o nome puro CRC-32 como apelido apenas de ISO-HDLC, que é o usado por zip, gzip e PNG. Mas uma especificação, um datasheet ou um chamado de suporte dizendo CRC-32 pode significar qualquer um dos cinco, e nada no valor resultante registra qual o produziu. Se dois sistemas discordam sobre uma soma por algo que parece uma constante, é isto o primeiro a descartar: é bem mais comum que um erro de transmissão de verdade.
A mesma armadilha está um nível abaixo, e lá é pior. O catálogo lista trinta e um algoritmos de dezesseis bits, e onze deles compartilham o polinômio 0x1021 — entre eles XMODEM, KERMIT, IBM-3740 e IBM-SDLC. Outros sete compartilham 0x8005, incluindo ARC, MODBUS e USB. Ou seja, um CRC de dezesseis bits identificado só pelo polinômio é ambíguo de onze maneiras, e é por isso que a única forma confiável de nomear um é dar os seis parâmetros. É exatamente para isso que o catálogo existe.
Como isto é verificado e o que significa a coluna de classe
O catálogo publica um valor de verificação para cada algoritmo: o resultado de rodá-lo sobre a string 123456789. Isso transforma os dados de referência na própria suíte de testes. Este motor é verificado reproduzindo os 113 valores publicados, e não concordando com outra biblioteca — concordar com a implementação de outra pessoa só provaria que duas pessoas fizeram as mesmas escolhas, enquanto reproduzir as definições prova que os parâmetros foram seguidos.
Cada algoritmo cuja largura é um número inteiro de bytes publica também um resíduo, uma segunda constante independente que descreve o que o registrador guarda depois de ler uma mensagem válida com a sua soma anexada. Esses também são reproduzidos, então a maioria das entradas fica conferida duas vezes por propriedades diferentes. Há ainda um controle negativo: um conjunto de parâmetros deliberadamente corrompido precisa falhar no seu valor de verificação, senão a comparação inteira passaria também para um motor que apenas devolvesse a resposta esperada.
Uma coluna do catálogo vale manter e costuma se perder quando tabelas são copiadas. Cada entrada é marcada attested, confirmed, academic ou third-party, e isso diz o quanto os seis parâmetros foram verificados contra uma implementação em funcionamento — não a qualidade do algoritmo. Attested significa que alguém os conferiu contra saída real; academic, que vêm de um artigo ou norma sem implementação à mão. Sessenta dos 113 são attested e trinta e oito academic, então um bom terço do catálogo são parâmetros que ninguém confirmou contra código rodando.
Dois limites honestos. Um CRC foi projetado contra corrupção acidental e não protege de adulteração deliberada: quem consegue mudar os seus dados consegue recalcular a soma, então um CRC nunca é uma medida de segurança. E aqui o cálculo processa a entrada bit a bit, por clareza e para suportar as larguras estranhas; isso serve para qualquer coisa que você cole numa caixa de texto, e não é como você calcularia a soma de um gigabyte.
Por que é grátis?
Roda no seu navegador. Deslocar um registrador não é trabalho que precise de servidor, então não há nada a pagar nem conta a criar.
Nada do que você cola é enviado, guardado ou registrado. Os dados de que você tira a soma costumam ser um quadro ou um arquivo de um sistema real, e o jeito confiável de manter isso privado é nunca recebê-lo.