CRC-16 und CRC-32-Prüfungen
Brauche ich Hilfe versuchen, um zu überprüfen, CRC-16-Werte (brauchen auch Hilfe mit dem CRC-32-Werte). Ich habe versucht, zu sitzen und zu verstehen, wie CRC funktioniert, aber ich bin keine Ahnung.
Mein erstes problem ist, beim Versuch, verwenden Sie einen online-Rechner für die Berechnung die Meldung "BD001325E032091B94C412AC
" in CRC16 = 12AC. Die Dokumentation besagt, dass die letzten beiden Oktette die CRC16-Wert, also ich bin der Eingabe von "BD001325E032091B94C4
" in die Website http://www.lammertbies.nl/comm/info/crc-calculation.html und erhalten 5A90 als Ergebnis statt 12AC.
Weiß jemand, warum diese Werte sind anders und wo finde ich Codes für wie berechnet CRC16 und CRC32-Werte (ich Plane, später lernen, wie dies zu tun, aber mal gar nicht erlauben, jetzt)?
Einige mehr-Nachrichten sind wie folgt:
16000040FFFFFFFF00015FCB
3C00003144010405E57022C7
BA00001144010101B970F0ED
3900010101390401B3049FF1
09900C800000000000008CF3
8590000000000000000035F7
00900259025902590259EBC9
0200002B00080191014BF5A2
BB0000BEE0014401B970E51E
3D000322D0320A2510A263A0
2C0001440000D60000D65E54
--Edit--
Habe ich noch mehr Informationen. Die Dokumentation wurde ich Referenzierung ist TIA-102.BAAA-EIN (aus dem TIA-standard). Das folgende ist, was in der Dokumentation dargelegt wird (versuchen, um Urheberrechtsverletzungen zu vermeiden, so viel wie möglich):
Den Letzten Block in einem Paket umfasst mehrere Bytes von Benutzerdaten und /oder
pad-Bytes, gefolgt von einem 4-Byte-CRC-parity-check. Dies bezeichnet man als die
packet-CRC.Der Paket-CRC ist ein 4-Byte cyclic redundancy check codiert über alle Daten
Bytes enthalten in den Intermediate-Blöcke und Bytes von Benutzer-Informationen
der Letzte Block. Die konkrete Berechnung ist wie folgt.Lassen k die Gesamtzahl der Nutzer information und pad-bits, über die das Paket
CRC berechnet werden soll. Betrachten Sie die k-Meldung bits als Koeffizienten eines
Polynom M(x) vom Grad k–1, die Zuordnung des MSB des null-TEN Nachricht
Oktett mit x^k–1 und das LSB des letzten Oktett Nachricht mit x^0. Definieren Sie die
generator-Polynom, GM(x), und die inversion Polynom, IM(x).GM(x) = 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 + 1IM(x) = x^31 + x^30 + x^29 + ... + x^2 + x +1
Das Paket-CRC-Polynom FM(x), dann berechnet sich aus der folgenden Formel.
FM(x) = ( x^32 M(x) mod GM(x) ) + IM(x) modulo 2, also im GF(2)
Den Koeffizienten von FM(x) sind in dem CRC-Feld mit dem MSB des null-TEN
Oktett des SFB entsprechend x^31 und das LSB des Dritten Oktetts der CRC
entsprechend x^0.
In dem obigen Zitat, habe ich ^
zu zeigen Befugnisse wie die Formatierung hat nicht die gleichen bleiben, wenn zitiert wird. Ich bin mir nicht sicher, was geht, was aber bedeutet das?
- Wo hast du den 12AC-Wert aus?
- Die letzten zwei bytes des BD001325E032091B94C412AC. Wenn Sie einen Blick auf den block der Beispiele scheint es, dass die letzten beiden bytes sind immer eine Prüfsumme.
- Es könnte auch anders sein, CRC-16 Werte, das hängt ganz von dem Polynom verwendet.
- Gabriel: "Die Dokumentation" = was Dokumentation?
- Sie haben Recht, meine Identifizierung nicht die Dokumentation. Ich bearbeitet meine Frage, um mehr details zeigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen Ross Williams tutorial auf CRCs, um ein besseres Verständnis von CRC ist, was definiert einen bestimmten CRC, und Ihre Implementierungen.
Den reveng-website hat einen exzellenten Katalog von bekannten CRCs, und für jeden der CRC-test-string (neun bytes: "123456789" in ASCII/UTF-8). Beachten Sie, dass es 22 verschiedene 16-bit-CRCs definiert.
Das reveng-software auf die gleiche Website kann verwendet werden, um reverse Engineering das Polynom, Initialisierung, post-processing, und die bit-Umkehr gegeben, mehrere Beispiele, wie Sie für die 16-bit-CRC. (Daher der name "reveng".) Ich lief Ihr die Daten durch und bekam:
Wie durch das "(none)", das 16-bit-CRC ist nicht einer der 22 aufgeführten auf reveng, obwohl es ähnlich ist, um mehrere von Ihnen, die sich nur in der Initialisierung.
Den zusätzlichen Informationen, die Sie für ein 32-bit-CRC, entweder CRC-32 CRC-32/BZIP in das reveng-Katalog, je nachdem, ob die bits vertauscht sind oder nicht.
Habe ich eine Klasse, die ich in einem C++ fand ich im internet, verwendet es eine lange berechnen CRC32. Es dem standard entsprechen und die eine Verwendung von PKZIP, WinZip und Ethernet. Um es zu testen, verwenden Sie Winzip und komprimieren einer Datei berechnen Sie dann die gleiche Datei mit dieser Klasse sollte es wieder der gleiche CRC. Es funktioniert für mich.
Es gibt durchaus ein paar Parameter CRC Berechnungen: Polynom, Startwert, final XOR... siehe Wikipedia für details. Ihre CRC nicht zu passen scheinen, die denen auf der Website, die Sie verwendet, aber Sie können versuchen und finden den richtigen Parameter aus der Dokumentation und verwenden Sie einen anderen Rechner, z.B. diese eine (obwohl ich fürchte, dass es keine Unterstützung für HEX-Eingabe).
Eine Sache im Auge zu behalten ist, dass CRC-16 ist in der Regel bezogen auf die Daten soll mit Prüfsummen versehen werden plus zwei null-bytes, z.B. Sie sind wahrscheinlich auf der Suche nach einem
CRC16
Funktion, woCRC16(BD001325E032091B94C40000) == 12AC
. Mit Prüfsummen berechnet auf diese Weise die CRC der Daten mit Prüfsumme angehängt wird zu 0, das macht das überprüfen einfacher, z.B.CRC16(BD001325E032091B94C412AC) == 0000