Thursday 16 November 2017

Crc Taschenrechner Online Binär Optionen


Online-CRC-Berechnung und freie Bibliothek Einführung in CRC-Berechnungen Immer wenn digitale Daten gespeichert oder miteinander verbunden sind, kann es zu Datenverfälschungen kommen. Seit dem Beginn der Informatik haben die Menschen nach Möglichkeiten gehandelt, mit dieser Art von Problem umzugehen. Für serielle Daten kamen sie mit der Lösung, um ein Paritätsbit an jedes gesendeten Byte anzuhängen. Dieser einfache Erkennungsmechanismus funktioniert, wenn sich eine ungerade Anzahl von Bits in einem Byte ändert, aber eine gerade Anzahl von falschen Bits in einem Byte wird nicht durch die Paritätsprüfung erkannt. Um dieses Problem zu überwinden, haben die Leute nach mathematischen Klangmechanismen gesucht, um mehrere falsche Bits zu erkennen. Die CRC-Berechnung bzw. die zyklische Redundanzprüfung war das Ergebnis. Heutzutage werden CRC-Berechnungen in allen Arten von Kommunikationen verwendet. Alle über eine Netzwerkverbindung gesendeten Pakete werden mit einem CRC überprüft. Auch jeder Datenbaustein auf Ihrer Festplatte ist mit einem CRC-Wert verbunden. Moderne Computerwelt kann auf diese CRC-Berechnung nicht verzichten. So sehen wir, warum sie so weit verbreitet sind. Die Antwort ist einfach, sie sind mächtig, erkennen viele Arten von Fehlern und sind extrem schnell zu berechnen, besonders wenn dedizierte Hardware-Chips verwendet werden. Man könnte denken, dass die Verwendung einer Prüfsumme korrekte CRC-Berechnungen ersetzen kann. Es ist sicherlich einfacher, eine Prüfsumme zu berechnen, aber Prüfsummen finden nicht alle Fehler. Nehmen wir einen Beispielstring und berechnen eine 1-Byte-Prüfsumme. Der Beispielstring ist Lammert, der in die ASCII-Werte umwandelt 76. 97 109 109 101 114 116 Die Ein-Byte-Prüfsumme dieses Arrays kann berechnet werden, indem alle Werte addiert werden, als es durch 256 zu teilen und den Rest zu halten. Die daraus resultierende Prüfsumme beträgt 210. Sie können den Rechner oben verwenden, um dieses Ergebnis zu überprüfen. In diesem Beispiel haben wir eine 1-Byte lange Prüfsumme verwendet, die uns 256 verschiedene Werte gibt. Bei Verwendung einer Zwei-Byte-Prüfsumme ergeben sich 65.536 mögliche Prüfsummenwerte und bei Verwendung eines Vier-Byte-Wertes gibt es mehr als vier Milliarden mögliche Werte. Wir könnten schließen, dass mit einer vier-Byte-Prüfsumme die Chance, dass wir versehentlich keinen Fehler erkennen, weniger als 1 bis 4 Milliarden beträgt. Scheint ziemlich gut, aber das ist nur Theorie. In der Praxis ändern sich die Bits während der Kommunikation nicht zufällig. Sie scheitern oft in Bursts oder durch elektrische Spikes. Nehmen wir an, dass in unserem Beispielarray das niedrigste signifikante Bit des Zeichens L gesetzt ist und das niedrigste signifikante Bit des Charters a während der Kommunikation verloren geht. Der Empfänger sieht das Array 77. 96 109 109 101 114 116, die den String Mmmert repräsentiert. Die Prüfsumme für diesen neuen String ist noch 210. Aber das Ergebnis ist offensichtlich falsch, nur nachdem sich zwei Bits geändert haben. Auch wenn wir eine vier Byte lange Prüfsumme benutzt hätten, hätten wir diesen Übertragungsfehler nicht erkannt. So berechnen eine Prüfsumme kann eine einfache Methode für die Erkennung von Fehlern, aber nicht viel mehr Schutz als die Parität Bit, unabhängig von der Länge der Prüfsumme. Die Idee hinter einer Scheckwertberechnung ist einfach. Verwenden Sie eine Funktion F (bval, cval), die ein Datenbyte und einen Prüfwert eingibt und einen neu berechneten Prüfwert ausgibt. In der Tat können auf diese Weise Prüfsummenberechnungen wie oben beschrieben definiert werden. Unser Beispiel für ein Byte-Prüfsumme hätte mit der folgenden Funktion (in C-Sprache) berechnet werden können, die wir für jedes Byte in der Eingabezeichenfolge wiederholt aufrufen. Der Anfangswert für cval ist 0. Die Idee hinter der CRC-Berechnung ist, die Daten als eine große Binärzahl zu betrachten. Diese Zahl wird durch einen bestimmten Wert geteilt und der Rest der Berechnung wird als CRC bezeichnet. Die Teilnahme an der CRC-Berechnung schätzt zunächst eine Menge Rechenleistung, aber sie kann sehr schnell durchgeführt werden, wenn wir eine Methode verwenden, die der in der Schule gelernten Methode ähnlich ist. Wir werden als Beispiel den Rest für den Charakter m mdash, der 1101101 in binary notationmdashby teilt es durch 19 oder 10011 berechnen. Bitte beachten Sie, dass 19 eine ungerade Zahl ist. Das ist notwendig, wie wir weiter sehen werden. Bitte beziehen Sie sich auf Ihre Schulbücher, da die binäre Berechnungsmethode hier nicht ganz anders ist als die Dezimalmethode, die Sie gelernt haben, als Sie jung waren. Es könnte nur ein bisschen seltsam aussehen. Auch die Notationen unterscheiden sich zwischen den Ländern, aber die Methode ist ähnlich. Mit Dezimalberechnungen können Sie schnell überprüfen, dass 109 geteilt durch 19 einen Quotienten von 5 mit 14 als Rest gibt. Aber was wir auch im Schema sehen, ist, dass jedes Bit extra zu überprüfen nur Kosten einen binären Vergleich und in 50 der Fälle eine binäre Subtraktion. Sie können die Anzahl der Bits der Testdaten stringmdash zum Beispiel auf 56 Bits leicht erhöhen, wenn wir unseren Beispielwert Lammert mdashand verwenden, kann das Ergebnis mit 56 binären Vergleichen und einem Durchschnitt von 28 binären Substraktionen berechnet werden. Dies kann in Hardware direkt mit nur wenigen Transistoren implementiert werden. Auch Software-Algorithmen können sehr effizient sein. Bei CRC-Berechnungen wird keine normale Subtraktion verwendet, aber alle Berechnungen werden modulo 2 durchgeführt. In dieser Situation ignorieren Sie Übertragsbits und in der Tat ist die Subtraktion gleich einer Exklusivität oder Operation. Das sieht seltsam aus, der daraus resultierende Rest hat einen anderen Wert, aber aus algebraischer Sicht ist die Funktionalität gleich. Eine Diskussion darüber würde eine universitäre Kenntnis der algebraischen Feldtheorie erfordern und ich denke, die meisten Leser interessieren sich nicht dafür. Bitte schauen Sie auf das Ende dieses Dokuments für Bücher, die dies im Detail besprechen. Jetzt haben wir eine CRC-Berechnungsmethode, die sowohl in Hardware als auch in Software implementierbar ist und auch ein zufälligeres Gefühl hat als die Berechnung einer gewöhnlichen Prüfsumme. Aber wie wird es in der Praxis ausführen, wenn ein oder mehrere Bits falsch sind Wenn wir das divisormdash19 in unserem Beispiel wählen, ist eine ungerade Zahl, man braucht keine hochrangige Mathematik, um zu sehen, dass jeder einzelne Bitfehler erkannt wird. Dies liegt daran, dass jeder einzelne Bitfehler den Dividend mit einer Potenz von 2 ändern lässt. Wenn sich zB das Bit n von 0 auf 1 ändert, erhöht sich der Wert des Dividenden mit 2 n. Wenn sich das Bit n von 1 auf 0 ändert, wird der Wert des Dividenden mit 2 n abnehmen. Weil du keine Kraft von zwei durch eine ungerade Zahl teilen kannst, wird sich der Rest der CRC-Berechnung ändern und der Fehler wird nicht unbemerkt bleiben. Die zweite Situation, die wir erkennen wollen, ist, wenn zwei einzelne Bits die Daten ändern. Dies erfordert einige Mathematik, die in Tanenbaums Buch weiter unten gelesen werden kann. Sie müssen Ihren Divisor sehr sorgfältig auswählen, um sicherzustellen, dass unabhängig von der Entfernung zwischen den beiden falschen Bits Sie immer erkennen werden. Es ist bekannt, dass die häufig verwendeten Werte 0x8005 und 0x1021 der CRC16- und CRC-CCITT-Berechnungen bei diesem Problem sehr gut funktionieren. Bitte beachten Sie, dass andere Werte möglicherweise oder nicht, und Sie können nicht einfach berechnen, welcher Teilerwert für die Erkennung von zwei Bitfehlern geeignet ist und welche nicht. Verlassen Sie sich auf eine umfangreiche mathematische Forschung zu diesem Thema, die vor einigen Jahrzehnten von hochqualifizierten Mathematikern durchgeführt wurde, und nutzen Sie die Werte, die diese Personen erhalten haben. Darüber hinaus wollen wir mit unserer CRC-Berechnung alle Fehler erkennen, bei denen eine ungerade Anzahl von Bitänderungen vorliegt. Dies kann durch die Verwendung eines Divisors mit einer geraden Anzahl von Bits erreicht werden. Mit modulo 2 Mathematik können Sie zeigen, dass alle Fehler mit einer ungeraden Anzahl von Bits erkannt werden. Wie ich schon sagte, in modulo 2 mathematik wird die substraktionsfunktion durch die exklusive oder ersetzt. Es gibt vier mögliche XOR-Operationen. Wir sehen, dass für alle Kombinationen von Bitwerten die Seltsamkeit des Ausdrucks gleich bleibt. Wenn man einen Divisor mit einer geraden Anzahl von Bits setzt, ist die Seltsamkeit des Restes gleich der Seltsamkeit des Dividenten. Wenn also die Seltsamkeit des Dividenden sich ändert, weil sich eine ungerade Anzahl von Bits ändert, ändert sich auch der Rest. So werden alle Fehler, die eine ungerade Anzahl von Bits ändern, durch eine CRC-Berechnung erkannt, die mit einem solchen Divisor durchgeführt wird. Vielleicht haben Sie gesehen, dass die gängigen Divisor-Werte 0x8005 und 0x1021 tatsächlich eine ungerade Anzahl von Bits haben und nicht einmal wie hier angegeben. Dies liegt daran, dass innerhalb des Algorithmus gibt es ein verstecktes Extra-Bit 2 16, die die tatsächliche verwendet Divisor Wert 0x18005 und 0x11021 innerhalb des Algorithmus macht. Last but not least wollen wir alle Burst-Fehler mit unserer CRC-Berechnung mit einer maximalen Länge erkennen und alle längeren Burst-Fehler mit hoher Wahrscheinlichkeit erkannt werden. Ein Burst-Fehler ist bei der Kommunikation sehr häufig. Es ist die Art von Fehler, der aufgrund von Blitz, Relais-Umschaltung, etc., wo während einer kleinen Zeit alle Bits auf eins gesetzt sind. Um das wirklich zu verstehen, musst du auch ein paar Kenntnisse von modulo 2 algebra haben, also bitte akzeptiere das mit einem 16-Bit-Divisor, dass du alle Bursts mit einer maximalen Länge von 16 Bits erkennen kannst und alle längeren Bursts mit mindestens 99,997 Sicherheit . In einem reinen mathematischen Ansatz wird die CRC-Berechnung als Polynomberechnungen abgeschrieben. Der Divisorwert wird am häufigsten nicht als Binärzahl bezeichnet, sondern ein Polynom bestimmter Ordnung. Im Normalleben werden einige Polynome häufiger als andere verwendet. Die drei, die in der Online-CRC-Berechnung auf dieser Seite verwendet werden, sind die 16 Bit breite CRC16 und CRCCCITT und die 32 Bits breite CRC32. Letzteres ist vermutlich am meisten benutzt, denn unter anderem ist es der CRC-Generator für alle Netzwerkverkehrsüberprüfung und - validierung. Für alle drei Arten von CRC Berechnungen habe ich eine kostenlose Software-Bibliothek zur Verfügung. Das Testprogramm kann direkt zum Testen von Dateien oder Strings verwendet werden. Sie können auch die Quellcodes betrachten und diese CRC-Routinen in Ihr eigenes Programm integrieren. Bitte beachten Sie die Initialisierungswerte der CRC-Berechnung und eventuell notwendige Nachbearbeitung wie Umschlagbits. Wenn Sie dies nicht tun, können Sie unterschiedliche Ergebnisse als andere CRC-Implementierungen erhalten. All diese Vor - und Nachbearbeitung erfolgt im Beispielprogramm, so dass es nicht schwierig sein sollte, Ihre eigene Implementierung zu bearbeiten. Ein üblicher Test ist, den CRC-Wert für den ASCII-String 123456789 zu berechnen. Wenn das Ergebnis Ihrer Routine mit dem Ergebnis des Testprogramms oder dem Ergebnis auf dieser Website übereinstimmt, funktioniert Ihre Implementierung und kompatibel mit den meisten anderen Implementierungen. Gerade als Referenz steht das Polynom für die gängigsten CRC-Berechnungen. Bitte beachten Sie, dass der höchste Term des Polynoms (x 16 oder x 32) nicht in der Binärzahldarstellung vorhanden ist, sondern durch den Algorithmus selbst impliziert wird. Polynomfunktionen für gängige CRCsDr.-Ing. K. Gorontzi, 2005 Die Eingangsbits werden in das ganz linke XOR-Tor verschoben. Das MSB (am weitesten links) jedes Bytes wird zuerst verschoben. Jedes Flipflop repräsentiert ein einzelnes CRC-Ausgangsbit. Das linkste Flipflop ist das MSB des CRC. Diese Implementierung muss nicht die serielle Eingabemeldung mit Nullen erweitern. Beachten Sie, dass in unserem Fall die Flipflops zu Nullen am Anfang jeder CRC-Berechnung gelöscht werden. Eine einfache VERILOG-Implementierung des obigen Polynoms wird hier gezeigt. Sie können das Quell-Snippet direkt in Ihren Code kopieren (verteilt unter LGPL): Eine einfache C-Implementierung des obigen Polynoms wird im folgenden Code angezeigt. Auch hier kannst du das Quell-Snippet direkt auf deinen Code kopieren (verteilt unter LGPL): Natürlich wird die Software hier zur Verfügung gestellt, da es keine ausdrücklichen oder stillschweigenden Garantien überhaupt gibt. Betrachten Sie diese Seite etwas nützlich Bitte schreiben Sie mir eine Notiz über contact. Purpose Der Zweck des CRCCalculator ist es, interaktiv die Werte CRC-16 und CRC-32 für einen bestimmten String oder eine Datei anzuzeigen. (Die CRC-32-Werte entsprechen denen, die von PKZIP berechnet werden.) Zusätzliche Dateien, CRC16Dem und CRC32Dem. Zeigen Sie, wie Sie ein Befehlszeilenprogramm erstellen, um CRC-Werte zu berechnen. Ein quotCquot-Befehlszeilenprogramm ist ebenfalls verfügbar. Materialien und Ausrüstung Softwareanforderungen Windows 95982000 und Delphi 34567 (zum Neukompilieren) oder Linux und Kylix 3 (zum Neukomparieren) Hardwareanforderungen VGA-Display Doppelklicken Sie auf das Symbol CRCCalculator. EXE, um das Programm zu starten (Windows) oder das Programm unter Linux auszuführen. CrcCalculator .. Geben Sie einen beliebigen Text in das Bearbeitungsfeld ein. Beachten Sie die Werte CRC-16 und CRC-32 in dezimal oder hexadezimal. Wählen Sie Datei tabsheet. Klicken Sie auf die Schaltfläche Lesen und wählen Sie eine Datei aus. Beachten Sie die Werte CRC-16 und CRC-32 in dezimal oder hexadezimal. Erwartete Werte Hex-Werte ändern sich nicht durch Version von Delphi, aber die Dezimalwerte sollen unsigniert sein. CRC-16-Werte waren immer unsigniert, aber da es in D1-D3 keine 4-Byte-Ganzzahl ohne Vorzeichen gab, werden die Dezimalwerte für den CRC-32 bis zur Delphi 4-Version signiert. In der Erläuterung zur InitialisierungFinalisierung finden Sie eine Beschreibung der Initialisierungsmethoden 1 und 2. Siehe Felipe Rocha Machados Kommentare zum Drucken von 32-Bit-Integern in D3. Die CRC-32s der Dateien abcLower. TXT. ABCupper. TXT. Und ThisIsAString. TXT in der CRCDelphi. ZIP-Datei entsprechen den obigen Werten, die auch im CRC32Dem. PAS-Befehlszeilenprogramm verifiziert werden: CRC-32 Bytes F ilename -------- -------- ------------------------ 352441C2 3 abcLower. TXT A3830348 3 ABCUpper. TXT 0876633F 16 ThisIsAString. TXT Diskussion CRC-Werte, insbesondere der CRC-32, sind Eine sehr gute Möglichkeit, die Integrität einer Datei zu überprüfen. Wenn der CRC-32 für eine Datei gleich bleibt, gibt es nur eine sehr geringe Wahrscheinlichkeit, dass die Datei geändert wurde - etwa 1 in 4 Milliarden. CRCs könnten als vorläufiges Verifikationstool verwendet werden, um identische Dateien zu finden. Wenn die CRCs von zwei Dateien nicht übereinstimmen, ist die Datei nicht gleich. Dies könnte sogar verwendet werden, um Bilddateien zu vergleichen. Nachschlagetabellen. Die quothardwarequot Methode der Berechnung von CRCs beinhaltet Bitmanipulationen, die für eine Softwareberechnung sehr ineffizient ist. Anstatt das CRC bitweise zu berechnen, kann eine 256-Element-Lookup-Tabelle verwendet werden, um das Äquivalent von 8-Bit-Operationen gleichzeitig durchzuführen. (In der IEEE Micro, Juni 1983, S. 40-50.) Für eine CRC-16 besteht die Lookup-Tabelle aus 256 2-Byte-Wörtern (siehe unten oder CRC16.PAS-Einheit) Für die eigentliche Tabelle oder das CRCTable-Programm zur Berechnung der Nachschlagtabelle für das x 16 x 15 x 2 1 Generator-Polynom): CONST-Tabelle: ARRAY0..255 WORD (0000, C0C1, C181,0140, C301,03C0, 0280, C241, C601,06C0,0780, C741,0500, C5C1, C481,0440, CC01,0CC0,0D80, CD41,0F00, CFC1, CE81,0E40,0A00, CAC1, CB81,0B40, C901,09C0,0880, C841, D801, 18C0,1980, D941,1B00, DBC1, DA81,1A40,1E00, DEC1, DF81,1F40, DD01,1DC0,1C80, DC41,1400, D4C1, D581,1540, D701,17C0,1680, D641, D201,12C0,1380, D341,1100, D1C1, D081,1040, F001,30C0, 3180, F141,3300, F3C1, F281,3240,3600, F6C1, F781,3740, F501, 35C0,3480, F441,3C00, FCC1, FD81,3D40, FF01,3FC0,3E80, FE41, FA01,3AC0,3B80, FB41,3900, F9C1, F881,3840,2800, E8C1, E981, 2940, EB01,2BC0,2A80, EA41, EE01,2EC0, 2F80, EF41,2D00, EDC1, EC81,2C40, E401,24C0,2580, E541,2700, E7C1, E681,2640,2200, E2C1, E381,2340, E101,21C0,2080, E041, A001,60C0,6180, A41, 6300, A3C1, A281,6240,6600, A6C1, A781,6740, A501,65C0,6480, A441,6C00, ACC1, AD81,6D40, AF01,6FC0,6E80, AE41, AA01,6AC0, 6B80, AB41, 6900, A9C1, A881,6840,7800, B8C1, B981,7940, BB01, 7BC0,7A80, BA41, BE01,7EC0,7F80, BF41,7D00, BDC1, BC81,7C40, B401,74C0,7580, B541,7700, B7C1, B681,7640,7200, B2C1, B381, 7340, B101,71C0,7080, B041,5000,90C1,9181,5140,9301,53C0, 5280,9241,9601,56C0,5780,9741,5500,95C1, 9481,5440,9C01, 5CC0,5D80,9D41,5F00,9FC1,9E81,5E40,5A00,9AC1,9B81,5B40, 9901,59C0,5880,9841,8801,48C0,4980,8941,4B00,8BC1,8A81, 4A40,4E00,8EC1,8F81,4F40,8D01,4DC0,4C80,8C41,4400,84C1, 8581,4540,8701,47C0,4680,8641,8201,42C0,4380,8341,4100, 81C1,8081,4040) In der obigen Nachschlagtabelle ist der Code für die Berechnung eines CRC-16 wie folgt (siehe Initialisierungsfinalisierung unten): PROCEDURE CalcCRC16 (p: pByte nbyte: WORD VAR CRCvalue: WORD) VAR i: WORD q: pByte Der Algorithmus ist wie folgt: 1. Exklusiv - oder das Eingangsbyte mit dem niederwertigen Byte des CRC-Registers, um einen INDEX zu erhalten 2. das CRC-Register acht Bits nach rechts verschieben 3. exklusiv - oder das CRC-Register mit dem Inhalt von TableINDEX 4. Schritte wiederholen 1 bis 3 für alle Bytes BEGIN q: p Für i: 1 TO nBYTE DO BEGIN CRCvalue: Hi (CRCvalue) XOR Tabelle q XOR Lo (CRCvalue) INC (q) END END Für einen CRC-32 besteht die Lookup-Tabelle aus 256 4-Byte-DWORDs (siehe auch CRC32.PAS-Einheit). Die Konstanten hier sind für das CRC-32-Generator-Polynom, wie in dem Microsoft Systems Journal, März 1995, S. 107-108 CONST-Tabelle definiert: ARRAY0..255 DWORD (00000000, 77073096, EE0E612C, 990951BA, 076DC419, 706AF48F, E963A535, 9E6495A3, 0EDB8832, 79DCB8A4, E0D5E91E, 97D2D988, 09B64C2B, 7EB17CBD, E7B82D07, 90BF1D91, 1DB71064, 6AB020F2, F3B97148, 84BE41DE, 1ADAD47D, 6DDDE4EB, F4D4B551, 83D385C7, 136C9856, 646BA8C0, FD62F97A, 8A65C9EC, 14015C4F, 63066CD9, FA0F3D63, 8D080DF5, 3B6E20C8, 4C69105E, D56041E4, A2677172, 3C03E4D1, 4B04D447, D20D85FD, A50AB56B, 35B5A8FA, 42B2986C, DBBBC9D6, ACBCF940, 32D86CE3, 45DF5C75, DCD60DCF, ABD13D59, 26D930AC, 51DE003A, C8D75180, BFD06116, 21B4F4B5, 56B3C423, CFBA9599, B8BDA50F, 2802B89E, 5F058808, C60CD9B2, B10BE924, 2F6F7C87, 58684C11, C1611DAB, B6662D3D, 76DC4190, 01DB7106, 98D220BC, EFD5102A, 71B18589, 06B6B51F, 9FBFE4A5, E8B8D433, 7807C9A2, 0F00F934, 9609A88E, E10E9818, 7F6A0DBB, 086D3D2D, 91646C97, E6635C01, 6B6B51F4, 1C6C6162, 856530D8, F262004E, 6C0695ED, 1B01A57B, 8208F4C1, F50FC457, 65B0D9C6, 12B7E950, 8BBEB8EA, FCB9887C, 62DD1DDF, 15DA2D49, 8CD37CF3, FBD44C65, 4DB26158, 3AB551CE, A3BC0074, D4BB30E2, 4ADFA541, 3DD895D7, A4D1C46D, D3D6F4FB, 4369E96A, 346ED9FC, AD678846, DA60B8D0, 44042D73, 33031DE5, AA0A4C5F, DD0D7CC9, 5005713C, 270241AA, BE0B1010, C90C2086, 5768B525, 206F85B3, B966D409, CE61E49F, 5EDEF90E, 29D9C998, B0D09822, C7D7A8B4, 59B33D17, 2EB40D81, B7BD5C3B, C0BA6CAD, EDB88320, 9ABFB3B6, 03B6E20C, 74B1D29A, EAD54739, 9DD277AF, 04DB2615, 73DC1683, E3630B12, 94643B84, 0D6D6A3E, 7A6A5AA8, E40ECF0B, 9309FF9D, 0A00AE27, 7D079EB1, F00F9344, 8708A3D2, 1E01F268, 6906C2FE, F762575D, 806567CB, 196C3671, 6E6B06E7, FED41B76, 89D32BE0, 10DA7A5A, 67DD4ACC, F9B9DF6F, 8EBEEFF9, 17B7BE43, 60B08ED5, D6D6A3E8, A1D1937E, 38D8C2C4, 4FDFF252, D1BB67F1, A6BC5767, 3FB506DD, 48B2364B, D80D2BDA, AF0A1B4C, 36034AF6, 41047A60, DF60EFC3, A867DF55, 316E8EEF, 4669BE79, CB61B38C, BC66831A, 256FD2A0, 5268E236, CC0C7795, BB0B4703, 220216B9, 5505262F, C5BA3BBE, B2BD0B28, 2BB45A92, 5CB36A04, C2D7FFA7, B5D0CF31, 2CD99E8B, 5BDEAE1D, 9B64C2B0, EC63F226, 756AA39C, 026D930A, 9C0906A9, EB0E363F, 72076785, 05005713, 95BF4A82, E2B87A14, 7BB12BAE, 0CB61B38, 92D28E9B, E5D5BE0D, 7CDCEFB7, 0BDBDF21, 86D3D2D4, F1D4E242, 68DDB3F8, 1FDA836E, 81BE16CD, F6B9265B, 6FB077E1, 18B74777, 88085AE6, FF0F6A70, 66063BCA, 11010B5C, 8F659EFF, F862AE69, 616BFFD3, 166CCF45, A00AE278, D70DD2EE, 4E048354, 3903B3C2, A7672661, D06016F7, 4969474D, 3E6E77DB, AED16A4A, D9D65ADC, 40DF0B66, 37D83BF0, A9BCAE53, DEBB9EC5, 47B2CF7F, 30B5FFE9, BDBDF21C, CABAC28A, 53B39330, 24B4A3A6, BAD03605, CDD70693, 54DE5729, 23D967BF, B3667A2E, C4614AB8, 5D681B02, 2A6F2B94, B40BBE37, C30C8EA1, 5A05DF1B, 2D02EF8D) Angesichts der obigen Nachschlagtabelle ist der Code für die Berechnung eines CRC-32 wie folgt (siehe Initialisierungsfinalisierung unten): Verwenden Sie CalcCRC32 als Prozedur, damit CRCValue übergeben werden kann, aber auch zurückgegeben wird. Dies ermöglicht mehrere Aufrufe von CalcCRC32 für die Quotsamequot CRC-32 Berechnung. VERFAHREN CalcCRC32 (p: Zeiger ByteCount: DWORD VAR CRCValue: DWORD) Das folgende ist ein wenig kryptisch (aber sehr schnell). Der Algorithmus lautet wie folgt: 1. Exklusiv - oder das Eingangsbyte mit dem niederwertigen Byte des CRC-Registers, um einen INDEX zu erhalten 2. das CRC-Register acht Bits nach rechts verschieben 3. Exklusiv - oder CRC-Register mit dem Inhalt Von TableINDEX 4. Wiederholen Sie die Schritte 1 bis 3 für alle Bytes VAR i: DWORD q: BYTE BEGIN q: p Für i: 0 TO ByteCount-1 DO BEGIN CRCvalue: (CRCvalue SHR 8) XOR Tabelle q XOR (CRCvalue UND 000000FF) INC (Q) END END Du kannst fast jedes Argument an diese Routine weitergeben, da der erste Parameter ein Zeiger ist. Für einen String übergeben Sie die Adresse des ersten Zeichens, zB: CalcCRC32 (Addr (s1), LENGTH (s), CRC32) Um eine Zugriffsverletzung in Delphi 4 (oder später) zu vermeiden, stellen Sie sicher, dass Länge (n) gt 0 ist. (Im nicht sicher, warum Delphi 3 nicht beschweren.) Diese Routine kann verwendet werden, um zu überprüfen, die CRC32 Tabelle der Konstanten wurde nicht versehentlich geändert. Der folgende Code in der Initialisierung der CRC32-Einheit prüft das 1024-Byte-Array von DWORDs: VAR CRC32Table: DWORD BEGIN Überprüfen Sie, ob die zur Berechnung der CRCs verwendete Tabelle nicht geändert wurde. Danke an Gary Williams für diesen Vorschlag, Jan. 2003. CRC32Table: FFFFFFFF CalcCRC32 (Addr (Tabelle0), SizeOf (Tabelle), CRC32Table) CRC32Table: NICHT CRC32Table IF CRC32Table lt 6FCF9E13 DANN ShowMessage (CRC32 Tabelle CRC32 ist IntToHex (Crc32Table, 8) , Erwartet 6FCF9E13) END. Um denselben CRC-32 zu berechnen, wie er im PKZIP-Dienstprogramm verwendet wird, beginnen Sie mit einem CRC-Wert von FFFFFFFF. Nach dem Aufruf von CalcCRC32 oben (beliebig oft) besteht die Finalisierung aus einem 1s-Komplement des CRC-Wertes. Dies kann mit dem Ausdruck NOT CRCvalue in Delphi berechnet werden. Weitere Details finden Sie im nächsten Abschnitt. Initialisierung und Finalisierung. Die Initialisierung und Finalisierung der CRC-Berechnung sind beliebig. Vor vielen Jahren, als ich zum ersten Mal mit der Berechnung von CRCs begann, setze ich den Anfangswert auf 0 und habe keine Finalisierung gemacht - dies ist unter "Erwartete Werte" beschrieben. CRC16: 0 WENN LENGTH (s) 0 Vermeidung von Zugriffsverletzung in D4 DANN CalcCRC16 (Addr (s1), LENGTH (s), CRC16) Der Quartett CRC-32 (der von PKZIP verwendete) beginnt mit FFFFFFFF als Anfangswert und dann Führt ein 1s-Komplement aus, um den endgültigen Wert zu liefern - dies ist ein übergeordnetes Gerät, das oben unter Erwartete Werte beschrieben wurde. Heres, was im CRC-Rechner für CRC-32s getan wird: CRC32: FFFFFFFF Um PKZIP zu entsprechen IF LENGTH (s) gt 0 Vermeidung von Zugriffsverletzung in D4 DANN CalcCRC32 (Addr (s1), LENGTH (s), CRC32) CRC32: NOT CRC32 PKZIP entsprechen In der CRC16-Berechnung ist der Anfangswert FFFF mit Methode 2. Danke an Rolf Gebhardt und Glen Harman, um auf eine Inkonsistenz zu verweisen, wie die Finalisierung in einer früheren Version dieses Artikels behandelt wurde. CRC einer Datei. Alle Bytes einer Datei müssen an die CalcCRC-Routinen übergeben werden, d. h. CalcCRC16 und CalcCRC32, um den CRC einer Datei zu berechnen. Das ältere BlockRead IO-Primitiv wird in der CalcFileCRC16-Routine in der CRC16-Einheit verwendet, da BlockRead an einem Punkt die einzige Möglichkeit war, einen binären Strom von Bytes zu lesen. CalcFileCRC32 verwendet den zeitlicheren Speicherstrom, um die Bytes einer Datei zu lesen (wenn die StreamIO-bedingte Kompilierung definiert ist). Verwenden Sie MemoryStream, um die Datei im Binärmodus zu lesen. PROCEDURE CalcFileCRC32 (FromName: STRING VAR CRCvalue: DWORD VAR TotalBytes: TInteger8 VAR-Fehler: WORD) VAR Stream: TMemoryStream BEGINNER Fehler: 0 CRCValue: FFFFFFFF Stream: TMemoryStream. Create TRY TRY Stream. LoadFromFile (FromName) IF Stream. Size 0 DANN CalcCRC32 (Stream. Memory, Stream. Size, CRCvalue) EXCEPT ON E: EReadError DO Fehler: 1 END CRCvalue: NICHT CRCvalue TotalBytes: Stream. Size FINALLY Stream. Free END END Die obige Prozedur geht davon aus, dass die Datei einfach in den Speicher in einem TMemoryStream. Leider kann dies eine schlechte Annahme sein, vor allem, wenn einige Dateien größer als physikalischer Speicher sind. Beispielsweise kann die Verarbeitung einer 1 GB-Datei in einem Speicherstrom mit nur 512 MB physischem Speicher mindestens die virtuelle Speicherverarbeitung des Betriebssystems steuern. Für jetzt ist das nicht viel ein Problem. FileCheck Programm. Informationen zum Erstellen von CRCs von Dateien, Verzeichnissen oder sogar ganzen Volumes finden Sie im FileCheck Lab Report. (QuotMetaquot CRCs - das heißt CRCs von CRCs einer gut geordneten Liste von Dateien - verwendet, um Änderungen in Verzeichnissen oder ganzen Datenträgervolumes zu erkennen.) Befehlszeilenprogramme. Die Befehlszeilenbeispiele CRC16Dem und CRC32Dem können aus einem DOS-Fenster kompiliert werden (vorausgesetzt, Ihr Pfad enthält das Delphi-Bin-Verzeichnis), indem Sie Folgendes eingeben: DCC32 CRC16Dem. PAS oder DCC32 CRC32Dem. PAS Studieren Sie die Befehlszeilenprogramme CRC16Dem und CRC32Dem für eine Berechnungsweise CRCs ohne Windows-Schnittstelle. Die Delphi-Installations-CD enthält eine Datei CRC32.C, die zeigt, wie man CRC-32s sowie die Lookup-Tabelle im Verzeichnis InfoExtrasZlibSrc berechnet. Peter Haas Delphi Einheit zur Demonstrationsberechnung von CRC, basierend auf dem Dokument: a Painless Guide to CRC Error Detection Algorithmenquot ftp: ftp. rocksoftpaperscrcv3.txt Peter Haas Einheit enthält Funktionen zur Berechnung eines beliebigen CRC (bis zu 32 Bit) durch gegebene Parameter ( Polynom, Init, XorOut, ReflectIn, ReflectOut). Ein weiterer Teil ist die Erstellung einer Nachschlagetabelle und die Berechnung mit dieser Tabelle. Das Gerät kann auch verwendet werden, um die Parameter für eine unbekannte CRC-Berechnung mit Versuch und Irrtum zu finden. Last but not least, enthält es die Einheit eine Funktion, die Delphi-Quelle erstellt, um einen CRC mit den angegebenen Parametern in einer separaten Anwendung zu berechnen. Delphi. pjh2.deunitsdownloadCRCs. zip quotFor die Liebe zum Gamequot von Michael Barr, Embedded Systems Programming. Dez. 1999, S. 47-54. Embeddedinternet99129912connect. htm quotSlow und Steady niemals verloren das Racequot von Michael Barr, Embedded Systems Programming. Jan. 2000, S. 37-46. Zeigt die Berechnung der CRC-Lookup-Tabelle an. Embeddedinternet00010001connect. htm Der CRC Pitstop ist ein Repository für Informationen über CRC und andere Checking Algorithmen rosscrc CRC - Der Cyclic Redundanz Code informatik. uni-frankfurt. de Robert Lees optimierter Code für CRC Berechnung: optimalcodeexcrc. zip Steve Schafers UseNet Post Zeigt die Berechnung von CRC-32 Nachschlagetabelle Bjrn Kriedemanns UseNet Post mit CRC-Einheit ab April 1997 DDJ: CRC16, XYZModemCRC16, CRC32 Lars Truijenss UseNet Post zeigt Delphi-Code für XModem CRC-16 (X 16 X 12 X 5 1) mit einer Nachschlagetabelle Eine CRC-Rechnereinheit bietet drei drehzahloptimierte Funktionen, um eine zyklische Redundanzprüfung (CRC) zu berechnen (oder weiter zu berechnen). Anwendbar auf XModem-Protokoll (16-Bit-CRC), SEAs Quarcapot-Dienstprogramm, PKZip (32-Bit-CRC) und viele andere kompatible Software, delphi. icm. edu. plftpd10freecrc. zip. SWAG (Software Archive Group) CRC Snipets: Enthält verschiedene CRC - und Checksum-Routinen gdsoftswagdownloads. html gdsoftswagcrc. zip (benötigt quotReader-Programm zum Anzeigen) quotCalculating CRC Checksums in Cquot von Colin Mahoney im Juni 1999 CC User Journal. Algorithmen Alfresco: Whirlpool (CRC Algorithmen), Julian Bucknall entwirft CRC, Delphi Magazine. Ausgabe 48, August 1999. Split und Join (verwenden Sie CRCs, um zu überprüfen, dass die Kopie korrekt ist, nachdem eine Datei in separate Disketten-Dateien aufgeteilt wurde und später wieder verbunden ist) unduArticles010511d. html Das D7 quotCompanion Toolsquot (Disk 1) hat ein Verzeichnis nagsoftwaresolutionscrc32library mit einem CRC32.EXE-Datei von NAG Software Solutions. Siehe die CRC32-Bibliothek auf CD 1 der Delphi Studio Companion Tools. Check-Ziffern (Kreditkarten und den Quod-Algorithmus des Zitat-Ziffern). Delphiforfun. orgProgrammeCheckdigits. htm Nützliche Literatur: quotProcedure for Computing CRC-32 Werte, Microsoft Systems Journal. März 1995, S. 107-108. QuotByte-weise CRC Berechnungen von Aram Perez in IEEE Micro. Juni 1983, S. 40-50. Zeigt an, wie man eine Nachschlagetabelle erstellt, die der beste Weg ist, um in Software zu implementieren (im Vergleich zu den Verschiebungen, die bei der Implementierung in Hardware durchgeführt werden). QuotA Tutorial auf CRC Computationsquot von Tenkasi V. Ramabadran und Sunil S. Gaitonde in IEEE Micro. August 1988, S. 62-75. QuotCyclic Redundanzprüfungen für Datenintegrität oder Identityquot von William H. Presse und Saul A. Teukolsky, Computer in Physik. JulAug 1989, S. 88-91. Andere Standardpolynome: CRC-16 Reverse: x 16 x 14 x 1 1 SDLC Reverse: x 16 x 11 x 4 1 CRC-12: x 12 x 11 x 3 x 2 x 1 1 Schlussfolgerungen CRC-Werte, insbesondere CRC-32 , Sind eine sehr gute Möglichkeit, die Integrität eines Strings oder sogar einer Datei zu überprüfen. Schlüsselwörter zyklische Redundanzprüfung, CRC-16, CRC-32, APPTYPE CONSOLE, Nachschlagetabelle, XOR, Comp, Int64, IntToHex, Addr, Delphi, Kylix CLX (Komponentenbibliothek für Cross-Plattform - Windows oder Linux) Kylix 3 Source und CrcCalculator ausführbare Datei: CRCCLX. tar. gz In Linux zum Extrahieren von Dateien: gunzip lt CRCCLX. tar. gz tar xvf - VCL (nur Visual Component Library - Windows) Delphi 2 - 6 Quelle und EXE (234 KB): CRCDelphi. ZIP ( Alte Version) Borland C 5.02 quotCquot CRC-32 Quelle und EXE (45 KB): CRCc. ZIP Verwenden Sie die Zifferndatei zum Kompilieren: make - f crc32.mak Ändern Sie die. mak-Datei, um auf die korrekte Position von wildargs. obj zu verweisen. Die. mak-Datei führt automatisch einen Test durch, den die Ergebnisse mit denen von PKZIP übereinstimmen.) Dieses Befehlszeilenprogramm kann mit Platzhaltern verwendet werden, um das CRC-32 von Dateien in einem Verzeichnis zu finden, zum Beispiel: crc32.

No comments:

Post a Comment