CRC32-beregner

Beregn CRC-32- eller CRC-32C-kontrolsummen af tekst, hexbytes eller en hel fil, vis den som hex, decimaltal eller Base64, og sammenlign den med en forventet værdi. Filer læses lokalt og bliver aldrig uploadet.

Alle algoritmer

Kører udelukkende i din browser. Intet bliver uploadet.

Sådan bruger du værktøjet

  1. Skriv eller indsæt tekst, skift inputtet til Hex for at angive rå bytes, eller klik på Åbn fil for at beregne kontrolsummen af en fils indhold.
  2. Behold CRC-32 under Algoritme til ZIP, gzip og PNG, eller vælg CRC-32C til iSCSI, ext4, Btrfs og Google Cloud Storage.
  3. Vælg under Output som mellem hex (små bogstaver), HEX (store bogstaver), Decimaltal og Base64.
  4. Hvis du vil kontrollere en værdi, skal du indsætte den forventede kontrolsum i Sammenlign med som hex uden 0x, som decimaltal eller som Base64.

Hvad en CRC32-kontrolsum er

En cyklisk redundanskontrol (CRC) behandler inputtet som ét langt binært polynomium, dividerer det med et fast generatorpolynomium og beholder resten. For CRC-32 er resten på 32 bit og skrives som regel som 8 hexcifre eller som et tal uden fortegn fra 0 til 4.294.967.295. Næsten enhver ændring af dataene ændrer resten.

CRC'er er designet til de fejl, som rigtige kabler, radioforbindelser og diske giver. CRC-32 opdager enhver sammenhængende række (burst) af beskadigede bit på op til 32 bit, og en tilfældig beskadigelse går kun ubemærket hen i omkring ét ud af 4,3 milliarder tilfælde. Den er også meget hurtig at beregne, og derfor er den indbygget i ZIP, gzip, PNG og Ethernet-rammer.

CRC-32 og CRC-32C

CRC-32CRC-32C (Castagnoli)
Polynomium0x04C11DB7, reflekteret 0xEDB883200x1EDC6F41, reflekteret 0x82F63B78
Kontrolværdi for 123456789cbf43926e3069283
Bruges afZIP, gzip, PNG, EthernetiSCSI, SCTP, ext4-metadata, Btrfs, Google Cloud Storage
HardwareunderstøttelseCRC32-instruktioner i ARMv8x86 SSE4.2-instruktionen crc32, ARMv8

Begge starter fra 0xFFFFFFFF, behandler bittene i hver byte med den mindst betydende bit først og inverterer den endelige værdi; kun polynomiet er forskelligt, så de samme data giver to resultater uden nogen sammenhæng. Den første er det, de fleste værktøjer mener med "CRC32", og den er katalogiseret som CRC-32/ISO-HDLC. CRC-32C blev senere taget i brug af lager- og netværksprotokoller på grund af den bedre fejlregistrering. Google Cloud Storage angiver CRC-32C og Amazon S3 en af de to varianter som Base64 af de fire bytes i big-endian-rækkefølge, og det er netop det, Base64-outputtet viser.

En kontrolsum, ikke et sikkerhedstjek

En CRC beskytter mod uheld, ikke mod angreb. Den er en lineær funktion, så alle kan ændre en fil og derefter justere fire bytes, så filens CRC-32 forbliver uændret. En CRC, der stemmer overens, beviser derfor intet med hensyn til bevidst manipulation. Hvis du vil kontrollere en download, skal du sammenligne med en SHA-256-hashværdi fra en pålidelig kilde; vil du bevise, hvem der har sendt en besked, skal du bruge en HMAC.

32 bit er heller ikke nok til at identificere data. Blandt omkring 77.000 tilfældige filer når sandsynligheden for, at to af dem har den samme CRC-32, allerede op på 50 %, så brug den ikke som unikt id eller nøgle til deduplikering. Hvor der ikke er nogen angriber involveret, er MD5 eller SHA-256 langt bedre fingeraftryk.

CRC32 i kode

# Python: zlib.crc32 er uden fortegn i Python 3;
# "& 0xffffffff" er kun nødvendig 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 siden Java 9

// PHP
sprintf('%08x', crc32('123456789'));   // 'cbf43926'
hash('crc32b', '123456789');           // 'cbf43926', samme CRC-32
hash('crc32c', '123456789');           // 'e3069283'
hash('crc32', '123456789');            // '181989fc', en anden CRC

Pas på navnene i PHP: Hashalgoritmen, der hedder crc32, er ikke ZIP-kontrolsummen, men den CRC, som bzip2 bruger, udskrevet i omvendt byterækkefølge. Brug crc32b eller funktionen crc32() for at få samme resultat som ZIP, gzip og dette værktøj. Unix-kommandoen cksum bruger endnu en variant, som også blander filens længde ind, så dens tal heller ikke stemmer overens med nogen af dem.

Eksempler

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

Ofte stillede spørgsmål

Hvad er CRC32 af "123456789"?
Denne streng er standardtestinputtet for CRC-algoritmer. Dens CRC-32 er cbf43926 (3421780262 som decimaltal), og dens CRC-32C er e3069283. Hvis din egen implementering returnerer disse værdier, bruger den de samme parametre som dette værktøj.
Hvorfor afviger min CRC32 fra et andet værktøjs?
Kontrollér fire ting: varianten (CRC-32, CRC-32C, bzip2-CRC'en og POSIX cksum giver alle forskellige resultater), bytes i inputtet (typen af linjeskift, et afsluttende linjeskift, tegnkodningen), talformatet (nogle sprog returnerer et 32-bit heltal med fortegn, hvilket gør store værdier negative) og byterækkefølgen.
Hvorfor står CRC-bytes i omvendt rækkefølge i min ZIP- eller gzip-fil?
ZIP og gzip gemmer CRC-32 i little-endian-byterækkefølge, så en hexeditor viser de fire bytes i omvendt rækkefølge i forhold til den sædvanlige notation. PNG gemmer den som big-endian. Dette værktøj, unzip -v og de fleste andre programmer udskriver den mest betydende byte først.
Kan jeg beregne CRC32 af en stor fil?

Ja. Klik på Åbn fil, så beregnes kontrolsummen ud fra filens bytes på din enhed, uden at filen bliver uploadet; enhver fil, din browser kan holde i hukommelsen, kan bruges. Bagefter kan du sammenligne resultatet med værdien i en SFV-fil eller en ZIP-oversigt.

Er CRC32 en hashfunktion?

Den afbilder data af vilkårlig længde til en fast værdi på 32 bit, så den nævnes ofte sammen med hashfunktioner, men den er en kontrolsum: Den opdager utilsigtede fejl og giver ingen beskyttelse mod nogen, der ændrer dataene med vilje. Når du har brug for et stærkere fingeraftryk, viser tabellen Alle algoritmer under resultatet MD5 og SHA-familien for det samme input.