bitlvl
DE

CRC- & Prüfsummen-Rechner

Tippen Sie Text, fügen Sie Hex-Bytes ein oder ziehen Sie eine Datei hinein und erhalten Sie alle gängigen CRCs auf einmal, jede mit ihren Parametern, damit Sie die Variante finden, die ein Gerät oder Protokoll verwendet.

Oder Datei hineinziehen, oder

Eigenes CRC-Modell

Spiegeln

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Was ein CRC ist

Eine zyklische Redundanzprüfung behandelt die Nachricht als eine lange Binärzahl und teilt sie durch ein festes Polynom; der Rest ist die Prüfsumme. Kippt ein einzelnes Bit oder ein Bitbündel, das kürzer als der CRC ist, ändert sich der Rest, weshalb CRCs Ethernet-Frames, ZIP-Einträge, PNG-Chunks, Plattensektoren und serielle Protokolle schützen. Sie sind in Hardware und Software schnell, aber nicht kryptografisch: Jeder kann Daten mit einem gewünschten CRC erzeugen.

Warum es so viele „CRC-16“ gibt

Zwei Implementierungen derselben Breite können sich in fünf Parametern unterscheiden, und jede Kombination ist eine andere Prüfsumme:

ParameterBedeutung
PolynomDer Divisor, ohne sein oberstes Bit geschrieben (0x1021 für CCITT, 0x04C11DB7 für CRC-32).
InitDer Startwert des Registers, 0 oder lauter Einsen.
Eingabe spiegelnOb jedes Eingabebyte mit dem niedrigstwertigen Bit zuerst verarbeitet wird (ja bei CRC-32, MODBUS; nein bei CCITT-FALSE, XMODEM).
Ausgabe spiegelnOb das Endregister bitweise umgekehrt wird.
XOR outEin abschließendes XOR, meist 0 oder lauter Einsen.

Die Standardmethode, eine Variante zu identifizieren, ist ihr Prüfwert: der CRC der ASCII-Zeichenkette 123456789. Die Tabelle oben zeigt ihn für jedes Modell, und die Standardeingabe ist genau diese Zeichenkette; wenn ein Gerät Ihnen eine Prüfsumme für bekannte Daten liefert, können Sie sie gegen alle Varianten auf einmal abgleichen.

Gängige Varianten

  • CRC-32 (0x04C11DB7, gespiegelt): Ethernet, ZIP, gzip, PNG, zlib.crc32, cksum -o 3.
  • CRC-32C (Castagnoli): iSCSI, SCTP, ext4-Metadaten, Btrfs, LevelDB; hat eine Hardware-Instruktion auf x86 und ARM und ist daher die schnelle Wahl für neue Entwürfe.
  • CRC-16/MODBUS: Modbus RTU über seriell; CRC-16/CCITT-FALSE: Bluetooth, viele „CRC-CCITT“-Angaben; CRC-16/XMODEM: XMODEM, Python binascii.crc_hqx.
  • Adler-32: zlib-Streams; schneller als CRC, aber schwächer bei kurzen Eingaben.

Fragen

Ist ein CRC dasselbe wie ein Hash?

Nein. Ein CRC erkennt zufällige Beschädigungen und lässt sich trivial umkehren oder fälschen. Für Integrität gegen einen Angreifer oder zum Identifizieren von Dateien nehmen Sie SHA-256. Für Geschwindigkeit auf einem vertrauenswürdigen Kanal ist CRC in Ordnung.

Mein Gerät liefert einen anderen CRC-16 als diese Seite.

Es gibt mindestens ein Dutzend CRC-16-Varianten. Geben Sie die Daten ein, die das Gerät geprüft hat, und vergleichen Sie seinen Wert mit jeder Zeile der Tabelle; die passende Zeile verrät Polynom, Init und Spiegelung des Geräts. Passt keine, probieren Sie das eigene Modell und prüfen Sie, ob das Gerät ein Längenbyte oder eine Adresse in die Daten einbezieht.

Welche Bytereihenfolge hat das Ergebnis?

Der CRC wird als Zahl angezeigt. Wenn er in ein Paket geschrieben wird, bestimmt das Protokoll die Reihenfolge: MODBUS sendet das niedrige Byte zuerst, XMODEM das hohe. Sehen Sie in der Spezifikation oder in einem Beispiel-Frame nach.

Was ist CRC-32C und warum verwenden Datenbanken es?

CRC-32 mit dem Castagnoli-Polynom, das bei den Blockgrößen von Speichersystemen bessere Fehlererkennung bietet und als einzelne CPU-Instruktion (SSE4.2 crc32, ARMv8 CRC32C) implementiert ist, was es um ein Mehrfaches schneller macht als den klassischen CRC-32.

Kann ich einen CRC inkrementell berechnen?

Ja. Alle diese CRCs lassen sich von einem vorherigen Wert aus fortsetzen, so funktioniert zlib.crc32(data, previous). Diese Seite berechnet die gesamte Eingabe auf einmal.