O que é o polinômio crc32?

1

Qual é o polinômio usado para o crc32? O ANSI X3.66 CRC-32 é 0x104C11DB7. A página man do crc32 não indica o polinômio usado.

    
por Luke Perkins 23.11.2015 / 20:40

1 resposta

5

A pergunta como está formulada é off-topic, no entanto tentarei torná-la no tópico, abordando como procurar documentação sobre as ferramentas que dependem dos módulos do Perl de maneira geral; em ordem:

  1. man <tool> ;

    De man crc32 :

           This utility is supplied with the Archive::Zip module for Perl.
    
  2. perldoc <module> ;

    De perldoc Archive::Zip :

        Archive::Zip::computeCRC32( $string [, $crc] )
        Archive::Zip::computeCRC32( { string => $string [, checksum => $crc ] } )
            This is a utility function that uses the Compress::Raw::Zlib CRC
            routine to compute a CRC-32.
    

    Aplique recursivamente até que algo avance ou o módulo "root" seja alcançado; Nesse caso, a recursão termina com perldoc Compress::Raw::Zlib , o que não vale;

  3. Digite o código-fonte do módulo "raiz" :

      

    Gere tabelas para um cálculo de CRC de 32 bits byte-wise no polinômio:   x ^ 32 + x ^ 26 + x ^ 23 + x ^ 22 + x ^ 16 + x ^ 12 + x ^ 11 + x ^ 10 + x ^ 8 + x ^ 7 + x ^ 5 + x ^ 4 + x ^ 2 + x + 1.

         

    Polinômios acima de GF (2) são representados em binário, um bit por coeficiente,   com os poderes mais baixos no bit mais significativo. Então adicionando polinômios   é apenas-exclusivo ou, e multiplicando um polinômio por x é um deslocamento à direita por   1. Se chamarmos o polinômio p acima, e representar um byte como o   polinômio q, também com a menor potência no bit mais significativo (de modo que o   byte 0xb1 é o polinômio x ^ 7 + x ^ 3 + x + 1), então o CRC é (q * x ^ 32) mod p,   onde um mod b significa o resto depois de dividir a por b.

         

    Este cálculo é feito usando o método shift-register de multiplicar e   tomando o restante. O registrador é inicializado para zero e para cada   bit de entrada, x ^ 32 é adicionado mod p ao registrador se o bit for um (onde   x ^ 32 mod p é p + x ^ 32 = x ^ 26 + ... + 1), e o registrador é multiplicado mod p por   x (que está passando por um e adicionando x ^ 32 mod p se o bit mudou   out é um). Começamos com a maior potência (bit menos significativo) de   q e repita para todos os oito bits de q.

         

    A primeira tabela é simplesmente o CRC de todos os possíveis valores de oito bits. Isto é   todas as informações necessárias para gerar CRCs em dados, um byte de cada vez para todos   combinações de valores de registro CRC e bytes recebidos. As restantes tabelas   permitem o cálculo da CRC de palavras por vez para big endian e little   máquinas endian, onde uma palavra é de quatro bytes.

por kos 23.11.2015 / 22:24