CRC32-controlesom berekenen

Bereken de CRC-32- of CRC-32C-controlesom van tekst, hex-bytes of een heel bestand, toon die als hex, decimaal getal of Base64 en vergelijk die met een verwachte waarde. Bestanden worden lokaal gelezen en nooit geüpload.

Alle algoritmen

Werkt volledig in je browser. Er wordt niets geüpload.

Zo gebruik je het

  1. Typ of plak tekst, zet Invoer als op Hex voor ruwe bytes, of klik op Bestand openen om de controlesom van een bestand te berekenen.
  2. Houd CRC-32 aan voor ZIP, gzip en PNG, of kies CRC-32C voor iSCSI, ext4, Btrfs en Google Cloud Storage.
  3. Kies bij Uitvoer als: hex (kleine letters), HEX (hoofdletters), Decimaal of Base64.
  4. Plak ter controle de verwachte controlesom in het veld Vergelijken met: als hex zonder 0x, als decimaal getal of als Base64.

Wat een CRC32-controlesom is

Een cyclische redundantiecontrole behandelt de invoer als één lange binaire polynoom, deelt die door een vaste generatorpolynoom en bewaart de rest. Bij CRC-32 is die rest 32 bits lang, meestal geschreven als 8 hexcijfers of als een geheel getal zonder teken van 0 tot 4.294.967.295. Vrijwel elke wijziging in de gegevens verandert de rest.

CRC's zijn ontworpen voor de fouten die echte kabels, radioverbindingen en schijven veroorzaken. CRC-32 detecteert elke burstfout (een reeks beschadigde bits) tot 32 bits lang, en een willekeurige beschadiging blijft maar in ongeveer één op de 4,3 miljard gevallen onopgemerkt. Bovendien is CRC-32 erg snel te berekenen; daarom zit het ingebouwd in ZIP, gzip, PNG en Ethernet-frames.

CRC-32 en CRC-32C

CRC-32CRC-32C (Castagnoli)
Polynoom0x04C11DB7, gespiegeld 0xEDB883200x1EDC6F41, gespiegeld 0x82F63B78
Controlewaarde van 123456789cbf43926e3069283
Gebruikt doorZIP, gzip, PNG, EthernetiSCSI, SCTP, metadata van ext4, Btrfs, Google Cloud Storage
HardwareondersteuningCRC32-instructies van ARMv8crc32-instructie van x86 SSE4.2, ARMv8

Beide beginnen bij 0xFFFFFFFF, verwerken de bits van elke byte met de minst significante bit eerst en inverteren de eindwaarde; alleen de polynoom verschilt, dus dezelfde gegevens leveren twee resultaten op die niets met elkaar te maken hebben. De eerste is wat de meeste tools met "CRC32" bedoelen en staat gecatalogiseerd als CRC-32/ISO-HDLC. CRC-32C werd later door opslag- en netwerkprotocollen overgenomen vanwege de sterkere foutdetectie. Google Cloud Storage rapporteert CRC-32C, en Amazon S3 een van beide varianten, als Base64 van de vier bytes in big-endian-volgorde, en dat is precies wat de Base64-uitvoer toont.

Een controlesom, geen beveiligingscontrole

Een CRC beschermt tegen ongelukken, niet tegen aanvallen. Een CRC is een lineaire functie, dus iedereen kan een bestand wijzigen en daarna vier bytes aanpassen zodat de CRC-32 gelijk blijft. Een overeenkomende CRC bewijst dus niets over opzettelijke manipulatie. Vergelijk voor het controleren van een download een SHA-256-hash uit een betrouwbare bron; gebruik een HMAC om te bewijzen wie een bericht heeft verstuurd.

32 bits is ook te weinig om gegevens te identificeren. Bij ongeveer 77.000 willekeurige bestanden is de kans dat twee ervan dezelfde CRC-32 hebben al 50%, dus gebruik het niet als uniek ID of als sleutel voor ontdubbeling. Waar geen aanvaller in het spel is, zijn MD5 of SHA-256 veel betere vingerafdrukken.

CRC32 in code

# Python: zlib.crc32 geeft in Python 3 een waarde zonder teken;
# "& 0xffffffff" is alleen nodig voor Python 2
import zlib
format(zlib.crc32(b'123456789'), '08x')    # 'cbf43926'

// Node.js 20.15+ en 22.2+
require('zlib').crc32('123456789').toString(16).padStart(8, '0')   // 'cbf43926'

// Go (import "hash/crc32")
crc32.ChecksumIEEE(data)                                   // CRC-32
crc32.Checksum(data, crc32.MakeTable(crc32.Castagnoli))    // CRC-32C

// Java: java.util.zip.CRC32, en java.util.zip.CRC32C sinds Java 9

// PHP
sprintf('%08x', crc32('123456789'));   // 'cbf43926'
hash('crc32b', '123456789');           // 'cbf43926', dezelfde CRC-32
hash('crc32c', '123456789');           // 'e3069283'
hash('crc32', '123456789');            // '181989fc', een andere CRC

Let in PHP op de namen: het hashalgoritme met de naam crc32 is niet de ZIP-controlesom, maar de CRC die bzip2 gebruikt, weergegeven in omgekeerde bytevolgorde. Gebruik crc32b of de functie crc32() om dezelfde waarde te krijgen als ZIP, gzip en deze tool. De Unix-opdracht cksum gebruikt weer een andere variant die ook de bestandslengte meeneemt, dus dat getal komt met geen van beide overeen.

Voorbeelden

Invoer (UTF-8)CRC-32
Hello, World!ec4ac3d0
Base64.is915d7207
你好50a2b841

Veelgestelde vragen

Wat is de CRC32 van "123456789"?
Deze string is de standaard testinvoer voor CRC-algoritmen. De CRC-32 ervan is cbf43926 (decimaal 3421780262) en de CRC-32C is e3069283. Geeft je eigen implementatie deze waarden, dan gebruikt die dezelfde parameters als deze tool.
Waarom wijkt mijn CRC32 af van die van een andere tool?
Controleer vier dingen: de variant (CRC-32, CRC-32C, de bzip2-CRC en POSIX cksum geven allemaal verschillende resultaten), de invoerbytes (regeleinden, een afsluitend regeleinde, de tekencodering), de getalnotatie (sommige talen geven een 32-bits geheel getal met teken terug, waardoor grote waarden negatief worden) en de bytevolgorde.
Waarom staan de CRC-bytes in mijn ZIP- of gzip-bestand omgekeerd?
ZIP en gzip slaan de CRC-32 op in little-endian-bytevolgorde, dus een hex-editor toont de vier bytes in omgekeerde volgorde ten opzichte van de gebruikelijke notatie. PNG slaat de waarde op als big-endian. Deze tool, unzip -v en de meeste andere programma's tonen de meest significante byte eerst.
Kan ik de CRC32 van een groot bestand berekenen?

Ja. Klik op Bestand openen en de controlesom wordt op je apparaat berekend uit de bytes van het bestand, zonder dat het wordt geüpload; elk bestand dat je browser in het geheugen kan houden, werkt. Daarna kun je het resultaat vergelijken met de waarde in een SFV-bestand of een ZIP-overzicht.

Is CRC32 een hashfunctie?

CRC32 zet gegevens van elke lengte om in een vaste waarde van 32 bits en wordt daarom vaak bij hashes genoemd, maar het is een controlesom: het spoort onbedoelde fouten op en biedt geen bescherming tegen iemand die de gegevens opzettelijk wijzigt. Heb je een sterkere vingerafdruk nodig, dan toont de tabel Alle algoritmen onder het resultaat MD5 en de SHA-familie voor dezelfde invoer.