Pergunta

Eu tenho uma string binária (mostrada no HEX abaixo) e estou usando CRC-16-CCITT.Eu quero que todos os meus CRCs saiam para um valor definido, 0x1D0F.Eu sei que é possível fazer com que os CRCs correspondam a esse valor anexando em 2 bytes até o final da mensagem original, mas não tenho certeza de como descobrir qual é o valor anexado.

ex.

0x01 0000 0000 0000 0000 0000 0000 0000 0000 13D8

Valor anexado é o 0x13d8

Adicionando este 13D8 na mensagem o CRC me dá o 0x1D0F desejado.

Qualquer ajuda sobre como calcular este valor 0x13D8 seria muito apreciado.

Se ele puder ser feito em códigos, é um bônus!

Foi útil?

Solução

A teoria é bastante simples, mas é claro que leva algum cuidado para implementar corretamente.

Você pode escolher qualquer 16 bits em qualquer lugar da mensagem (incluindo dois bytes no final ou 16 bits individuais espalhados onde quiser) ser indefinido. Ligue para eles xi para i= 0..15 . Em seguida, use um algoritmo CRC de bits bits para processar a mensagem, mas gerar e atualizar os coeficientes de 16 equações lineares em xi , representando os 16 bits do CRC.

Você então tem uma simples equação de matriz AX + B= C . As operações para AX + B= C não são a multiplicação habitual e a adição, mas sim, e e operações exclusivas ou . < / p >.

Agora você usa os métodos usuais para inverter a matriz a , que é realmente mais fácil com e e xor (adição e subtração agora Tanto a mesma coisa, apenas exclusivo - ou), computa b ^ c e multiplique que pelo inverso. Agora você tem os valores para colocar os bits xi para obter o CRC desejado.

Uma simplificação adicional é que você não precisa da mensagem real, apenas o tamanho e a localização do xi e, em seguida, fazer o acima com todos os outros bits da mensagem definida como zero . Isso é porque se você tiver duas mensagens p e q do mesmo comprimento, então CRC (P) ^ CRC (Q)= CRC (P ^ Q) . (Isso se aplica ao algoritmo CRC CORE, ignorando pré e pós-processamento do CRC.)

update:

Você pode baixar spoof.c , que resolve o problema de modificar uma mensagem para produzir um determinado CRC .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top