FreeToGenerate.com

113 algoritmos catalogados, cada um verificado contra o próprio valor de verificação publicado. Nada é enviado.

O padrão é a própria string de teste do catálogo, então cada resultado abaixo é um valor que você mesmo pode conferir na tabela publicada.

Resultado

0xcbf43926

Isto bate com o valor de verificação que o catálogo publica para este algoritmo.

Parâmetros

largura
32
polinômio
0x04c11db7
inicial
0xffffffff
refletir entrada
sim
refletir saída
sim
XOR final
0xffffffff
classe
attested

também conhecido como CRC-32

Mesmo polinômio, resultados diferentes

Todos estes algoritmos usam o polinômio acima. Eles diferem apenas no registrador inicial, nas flags de reflexão e no XOR final — e isto é o que cada um devolve para a sua entrada.

CRC-32/BZIP20xfc891918
CRC-32/CKSUM0x765e7680
CRC-32/ISO-HDLC0xcbf43926
CRC-32/JAMCRC0x340bc6d9
CRC-32/MPEG-20x0376e6e7

É por isso que uma soma rotulada apenas como CRC-32 não basta. O catálogo lista esse nome puro como apelido de ISO-HDLC, o que zip, gzip e PNG usam, mas uma especificação ou um chamado de suporte dizendo CRC-32 pode significar qualquer um destes cinco. Nada no valor registra qual o produziu, então se dois sistemas discordam por uma constante, é isto o primeiro a descartar.

O catálogo

algoritmos em uso
113
deles de 32 bits
12
compartilham polinômio
5

Como isto é verificado

Cada entrada do catálogo publica um valor de verificação: o resultado de rodar aquele algoritmo sobre a string 123456789. Isso transforma os dados de referência na própria suíte de testes, então este motor é verificado reproduzindo os 113 valores publicados, e não concordando com a biblioteca de outra pessoa. Cada algoritmo com largura múltipla de oito publica também um resíduo, uma segunda constante independente, e esses também são reproduzidos.

O catálogo também registra o quanto cada conjunto de parâmetros foi conferido, e essa coluna vale manter. Attested significa que os valores foram confirmados contra uma implementação em funcionamento; academic, que vêm de um artigo ou norma sem uma; third-party, que a confirmação foi feita por outra pessoa. Não diz nada sobre a qualidade do algoritmo, apenas sobre a confiança nos seis números.

Parâmetros do Catalogue of Parametrised CRC Algorithms (CRC RevEng). Nada é enviado: o cálculo acontece nesta aba.

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

  1. 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.
  2. 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.
  3. 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.