Zo gebruik je het
- 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.
- Houd CRC-32 aan voor ZIP, gzip en PNG, of kies CRC-32C voor iSCSI, ext4, Btrfs en Google Cloud Storage.
- Kies bij Uitvoer als: hex (kleine letters), HEX (hoofdletters), Decimaal of Base64.
- 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-32 | CRC-32C (Castagnoli) | |
|---|---|---|
| Polynoom | 0x04C11DB7, gespiegeld 0xEDB88320 | 0x1EDC6F41, gespiegeld 0x82F63B78 |
Controlewaarde van 123456789 | cbf43926 | e3069283 |
| Gebruikt door | ZIP, gzip, PNG, Ethernet | iSCSI, SCTP, metadata van ext4, Btrfs, Google Cloud Storage |
| Hardwareondersteuning | CRC32-instructies van ARMv8 | crc32-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.is | 915d7207 |
你好 | 50a2b841 |
Veelgestelde vragen
Wat is de CRC32 van "123456789"?
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?
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?
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.