Ethernet CRC32 cálculo - software vs resultado algorítmico

Estou tentando calcular a FCS (Frame Check Sequence) de um pacote Ethernet byte a byte. O polinômio é0x104C11DB7. Eu segui o algoritmo XOR-SHIFT visto aquihttp: //en.wikipedia.org/wiki/Cyclic_redundancy_chec ou aquihttp: //www.woodmann.com/fravia/crctut1.ht

Suponha que as informações que deveriam ter um CRC tenham apenas um byte. Digamos que seja 0x03.

step: pad com 32 bits para a direita

0x0300000000

alinhe o polinômio e os dados no lado esquerdo com o primeiro bit que não seja zero e xe eles

0x300000000 xor 0x209823B6E = 0x109823b6e

pegue o restante alinhado e xor novamente

0x109823b6e xor 0x104C11DB7 = 0x0d4326d9

Como não resta mais nada, o CRC32 de 0x03 deve ser0x0d4326d9

nfelizmente, todas as implementações de software me dizem que estou errado, mas o que fiz de errado ou o que elas estão fazendo de diferent

Python me diz:

 "0x%08x" % binascii.crc32(chr(0x03))
 0x4b0bbe37

A ferramenta online aquihttp: //www.lammertbies.nl/comm/info/crc-calculation.html#int obtém o mesmo resultado. Qual é a diferença entre o meu cálculo manual e o algoritmo que o software mencionado usa?

ATUALIZAR

Volta lá fora, já havia uma pergunta semelhante no estouro de pilha:

Você encontra uma resposta aquiPython CRC-32 desgraças

Embora isso não seja muito intuitivo. Se você quiser uma descrição mais formal de como isso é feito para os quadros Ethernet, consulte oEthernet Documento padrão 802.3 Parte 3 - Capítulo 3.2.9 Campo Sequência de Verificação de Quadro

Vamos continuar o exemplo acima:

Inverta a ordem dos bits da sua mensagem. Isso representa a maneira como eles entrariam no receptor pouco a pouc

0x03 portanto é0xC0

Complemente os primeiros 32 bits da sua mensagem. Observe que preenchemos o byte único com 32 bits novament

0xC000000000 xor 0xFFFFFFFF = 0x3FFFFFFF00

Conclua o método Xor e shift de cima novamente. Após cerca de 6 etapas, você obtém:

0x13822f2d

A sequência de bits acima é complementad

0x13822f2d xor 0xFFFFFFFF = 0xec7dd0d2

Lembre-se de que invertemos a ordem dos bits para obter a representação no fio Ethernet na etapa um. Agora temos que reverter essa etapa e finalmente cumprir nossa missão.

0x4b0bbe37

Quem criou essa maneira de fazê-lo deve ser ...

Muitas vezes você realmente quer saber que a mensagem que recebeu está correta. Para conseguir isso, leve sua mensagem recebida, incluindo o FCS, e siga as mesmas etapas de 1 a 5 acima. O resultado deve ser o que eles chamam de resíduo. O que é uma constante para um determinado polinômio. Nesse caso, é0xC704DD7B.

Como mcdowella menciona que você precisa brincar com seus bits até acertar, dependendo do aplicativo que estiver usand

questionAnswers(8)

yourAnswerToTheQuestion