Question

J'ai une chaîne binaire (montrée en hex-ci-dessous) et utilisez CRC-16-CCITT.Je veux que tous mes CRC deviennent de la valeur définie, 0x1d0f.Je sais qu'il est possible de faire correspondre les CRC de cette valeur en ajoutant 2 octets à la fin du message d'origine, mais je ne sais pas comment savoir quelle est la valeur ajoutée.

ex.

0x01 00h00 0000 0000 0000 0000 0000 0000 0000 0000 13d8

La valeur ajoutée est le 0x13d8

En ajoutant ce 13D8 sur le message Le CRC me donne le 0x1D0F souhaité.

Toute aide sur la manière de calculer cette valeur 0x13D8 serait grandement appréciée.

Si cela peut être fait soigneusement dans le code, il s'agit d'un bonus!

Était-ce utile?

La solution

La théorie est assez simple, mais bien sûr, il prend des soins à mettre en œuvre correctement.

Vous pouvez choisir de 16 bits n'importe où dans le message (dont deux octets à la fin ou de 16 bits individuels dispersés où que vous aimiez) soit indéfini. Appelez-les xi pour i= 0..15 . Ensuite, utilisez un algorithme de CRC bit-by-bit pour traiter le message, mais générer et mettre à jour les coefficients de 16 équations linéaires dans xi , représentant les 16 bits du CRC.

Vous avez ensuite une équation de matrice simple hache + b= c . Les opérations pour AX + B= C ne sont pas la multiplication et l'addition habituelles, mais plutôt des et et les opérations exclusives-ou . < / p>

Vous utilisez maintenant les méthodes habituelles pour inverser la matrice a , qui est en fait plus facile avec et et xor (addition et soustraction sont maintenant À la fois la même chose, juste exclusif-ou), calculer b ^ c et multiplie que par l'inverse. Maintenant, vous avez les valeurs à mettre dans les bits xi pour obtenir le CRC souhaité.

Une simplification supplémentaire est que vous n'avez pas besoin du message réel, de la longueur et de l'emplacement du xi , puis faites ce qui précède avec tous les autres bits du message défini sur zéro . En effet, si vous avez deux messages p et q de la même longueur, alors CRC (p) ^ CRC (q)= CRC (P ^ Q) . (Ceci s'applique à l'algorithme CRC CRC, en ignorant le pré et post-traitement de la CRC.)

mise à jour:

Vous pouvez télécharger spoof.coofollant ", qui résout le problème de la modification d'un message pour produire un CRC particulier .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top