Slik bruker du verktøyet
- Skriv eller lim inn tekst, bytt inndata til Hex for rå byte, eller åpne en fil for å beregne kontrollsummen av innholdet.
- Behold CRC-32 for ZIP, gzip og PNG, eller velg CRC-32C for iSCSI, ext4, Btrfs og Google Cloud Storage.
- Velg under Utdata som: hex (små bokstaver), HEX (store bokstaver), Desimal eller Base64.
- For å verifisere limer du inn den forventede kontrollsummen i Sammenlign med, som hex uten 0x, som desimaltall eller som Base64.
Hva en CRC32-kontrollsum er
En syklisk redundanssjekk (CRC) behandler inndataene som ett langt binært polynom, deler det på et fast generatorpolynom og beholder resten. For CRC-32 har resten 32 bit og skrives vanligvis som 8 hex-sifre eller som et tall uten fortegn fra 0 til 4 294 967 295. Nesten enhver endring i dataene endrer resten.
CRC-er er laget for de feilene som virkelige kabler, radioer og disker gir. CRC-32 oppdager alle sammenhengende feilsekvenser (burst-feil) på opptil 32 bit, og en tilfeldig skade går bare ubemerket hen i omtrent ett av 4,3 milliarder tilfeller. Den er også svært rask å beregne, og derfor er den bygget inn i ZIP, gzip, PNG og Ethernet-rammer.
CRC-32 og CRC-32C
| CRC-32 | CRC-32C (Castagnoli) | |
|---|---|---|
| Polynom | 0x04C11DB7, reflektert 0xEDB88320 | 0x1EDC6F41, reflektert 0x82F63B78 |
Kontrollverdi for 123456789 | cbf43926 | e3069283 |
| Brukes av | ZIP, gzip, PNG, Ethernet | iSCSI, SCTP, ext4-metadata, Btrfs, Google Cloud Storage |
| Maskinvarestøtte | CRC32-instruksjonene i ARMv8 | x86 SSE4.2-instruksjonen crc32, ARMv8 |
Begge starter fra 0xFFFFFFFF, behandler bitene i hver byte med den minst signifikante først og inverterer sluttverdien; bare polynomet er forskjellig, så de samme dataene gir to urelaterte resultater. Den første er det de fleste verktøy mener med «CRC32», og er katalogisert som CRC-32/ISO-HDLC. CRC-32C ble senere tatt i bruk av lagrings- og nettverksprotokoller fordi den oppdager feil bedre. Google Cloud Storage oppgir CRC-32C, og Amazon S3 en hvilken som helst av de to, som Base64 av de fire bytene i big-endian-rekkefølge, og det er nøyaktig det Base64-utdataene viser.
En kontrollsum, ikke en sikkerhetskontroll
En CRC beskytter mot uhell, ikke mot angrep. Den er en lineær funksjon, så hvem som helst kan endre en fil og deretter justere fire byte slik at CRC-32 forblir uendret. En CRC som samsvarer, beviser derfor ingenting om bevisst manipulering. For å kontrollere en nedlasting sammenligner du en SHA-256-hash fra en pålitelig kilde; for å bevise hvem som sendte en melding, bruker du en HMAC.
32 bit er også for lite til å identifisere data. Blant omtrent 77 000 tilfeldige filer er sjansen for at to av dem har samme CRC-32, allerede 50 %, så ikke bruk den som unik ID eller som nøkkel for deduplisering. Der ingen angriper er involvert, gir MD5 eller SHA-256 langt bedre fingeravtrykk.
CRC32 i kode
# Python: zlib.crc32 er uten fortegn i Python 3;
# "& 0xffffffff" trengs bare i Python 2
import zlib
format(zlib.crc32(b'123456789'), '08x') # 'cbf43926'
// Node.js 20.15+ og 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, og java.util.zip.CRC32C fra og med Java 9
// PHP
sprintf('%08x', crc32('123456789')); // 'cbf43926'
hash('crc32b', '123456789'); // 'cbf43926', samme CRC-32
hash('crc32c', '123456789'); // 'e3069283'
hash('crc32', '123456789'); // '181989fc', en annen CRC
Vær oppmerksom på navnene i PHP: Hashalgoritmen som heter crc32, er ikke ZIP-kontrollsummen, men CRC-en som brukes av bzip2, skrevet ut i omvendt byterekkefølge. Bruk crc32b eller funksjonen crc32() for å få samme resultat som ZIP, gzip og dette verktøyet. Unix-kommandoen cksum bruker enda en variant som i tillegg blander inn filens lengde, så tallet den gir, samsvarer heller ikke.
Eksempler
| Inndata (UTF-8) | CRC-32 |
|---|---|
Hello, World! | ec4ac3d0 |
Base64.is | 915d7207 |
你好 | 50a2b841 |
Ofte stilte spørsmål
Hva er CRC32 av «123456789»?
cbf43926 (3421780262 i desimal), og CRC-32C er e3069283. Hvis din egen implementasjon returnerer disse verdiene, bruker den de samme parameterne som dette verktøyet.Hvorfor får jeg en annen CRC32 enn i et annet verktøy?
cksum gir alle forskjellige resultater), inndatabytene (type linjeskift, et ekstra linjeskift på slutten, tegnkodingen), tallformatet (noen språk returnerer et 32-biters heltall med fortegn, som gjør store verdier negative) og byterekkefølgen.Hvorfor er CRC-bytene snudd i ZIP- eller gzip-filen min?
unzip -v og de fleste andre programmer skriver den mest signifikante byten først.Kan jeg beregne CRC32 av en stor fil?
Ja. Klikk på Åpne fil, så beregnes kontrollsummen av filens byte på enheten din uten at filen lastes opp; alle filer som nettleseren din kan holde i minnet, fungerer. Deretter kan du sammenligne resultatet med verdien i en SFV-fil eller en ZIP-oversikt.
Er CRC32 en hashfunksjon?
Den gjør data av vilkårlig lengde om til en fast 32-biters verdi, så den nevnes ofte sammen med hasher, men den er en kontrollsum: Den oppdager utilsiktede feil og gir ingen beskyttelse mot noen som endrer dataene med vilje. Når du trenger et sterkere fingeravtrykk, viser tabellen Alle algoritmer under resultatet MD5 og SHA-familien for de samme inndataene.