CRC32-kontrollsumkalkulator

Beregn CRC-32- eller CRC-32C-kontrollsummen av tekst, hex-byte eller en hel fil, vis den som hex, desimaltall eller Base64, og sammenlign den med en forventet verdi. Filer leses lokalt og lastes aldri opp.

Alle algoritmer

Kjører helt i nettleseren din. Ingenting lastes opp.

Slik bruker du verktøyet

  1. Skriv eller lim inn tekst, bytt inndata til Hex for rå byte, eller åpne en fil for å beregne kontrollsummen av innholdet.
  2. Behold CRC-32 for ZIP, gzip og PNG, eller velg CRC-32C for iSCSI, ext4, Btrfs og Google Cloud Storage.
  3. Velg under Utdata som: hex (små bokstaver), HEX (store bokstaver), Desimal eller Base64.
  4. 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-32CRC-32C (Castagnoli)
Polynom0x04C11DB7, reflektert 0xEDB883200x1EDC6F41, reflektert 0x82F63B78
Kontrollverdi for 123456789cbf43926e3069283
Brukes avZIP, gzip, PNG, EthernetiSCSI, SCTP, ext4-metadata, Btrfs, Google Cloud Storage
MaskinvarestøtteCRC32-instruksjonene i ARMv8x86 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.is915d7207
你好50a2b841

Ofte stilte spørsmål

Hva er CRC32 av «123456789»?
Denne strengen er standard testinndata for CRC-algoritmer. CRC-32 av den er 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?
Sjekk fire ting: varianten (CRC-32, CRC-32C, bzip2-CRC-en og POSIX 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?
ZIP og gzip lagrer CRC-32 i little-endian-byterekkefølge, så en hex-editor viser de fire bytene i motsatt rekkefølge sammenlignet med vanlig notasjon. PNG lagrer den som big-endian. Dette verktøyet, 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.