Beräkna CRC32-kontrollsumma

Beräkna kontrollsumman CRC-32 eller CRC-32C för text, hexbyte eller en hel fil, visa den som hex, decimaltal eller Base64 och jämför den med ett förväntat värde. Filer läses lokalt och laddas aldrig upp.

Alla algoritmer

Körs helt i din webbläsare. Inget laddas upp.

Så använder du verktyget

  1. Skriv eller klistra in text, välj Hex under Indata som för råa byte, eller klicka på Öppna fil för att beräkna kontrollsumman för filens innehåll.
  2. Behåll CRC-32 för ZIP, gzip och PNG, eller välj CRC-32C för iSCSI, ext4, Btrfs och Google Cloud Storage.
  3. Välj format under Utdata som: hex (gemener), HEX (versaler), Decimaltal eller Base64.
  4. För att verifiera klistrar du in den förväntade kontrollsumman i Jämför med, som hex utan 0x, som decimaltal eller som Base64.

Vad en CRC32-kontrollsumma är

En cyklisk redundanskontroll (CRC) behandlar indatan som ett enda långt binärt polynom, dividerar det med ett fast generatorpolynom och behåller resten. För CRC-32 är resten 32 bitar, som oftast skrivs som 8 hexsiffror eller som ett heltal utan förtecken från 0 till 4 294 967 295. Nästan varje ändring av datan ändrar resten.

CRC:er är utformade för de fel som verkliga kablar, radiolänkar och diskar ger upphov till. CRC-32 upptäcker varje skur av förvanskade bitar som är upp till 32 bitar lång, och en slumpmässig förvanskning går obemärkt förbi bara ungefär en gång på 4,3 miljarder. Den är dessutom mycket snabb att beräkna, och därför är den inbyggd i ZIP, gzip, PNG och Ethernet-ramar.

CRC-32 och CRC-32C

CRC-32CRC-32C (Castagnoli)
Polynom0x04C11DB7, reflekterat 0xEDB883200x1EDC6F41, reflekterat 0x82F63B78
Kontrollvärde för 123456789cbf43926e3069283
Används avZIP, gzip, PNG, EthernetiSCSI, SCTP, ext4-metadata, Btrfs, Google Cloud Storage
HårdvarustödCRC32-instruktionerna i ARMv8instruktionen crc32 i x86 SSE4.2, ARMv8

Båda startar från 0xFFFFFFFF, bearbetar bitarna i varje byte med den minst signifikanta biten först och inverterar slutvärdet; bara polynomet skiljer sig, så samma data ger två helt orelaterade resultat. Den första är vad de flesta verktyg menar med "CRC32" och katalogiseras som CRC-32/ISO-HDLC. CRC-32C infördes senare i lagrings- och nätverksprotokoll tack vare sin bättre feldetektering. Google Cloud Storage anger CRC-32C, och Amazon S3 vilken som helst av de två varianterna, som Base64 av de fyra byten i big-endian-ordning, vilket är exakt vad Base64-utdatan visar.

En kontrollsumma, inte en säkerhetskontroll

En CRC skyddar mot olyckor, inte mot attacker. Den är en linjär funktion, så vem som helst kan ändra en fil och sedan justera fyra byte så att dess CRC-32 förblir oförändrad. En CRC som stämmer bevisar därför ingenting om avsiktlig manipulation. För att kontrollera en nedladdning jämför du ett SHA-256-hashvärde från en betrodd källa; för att bevisa vem som skickade ett meddelande använder du en HMAC.

32 bitar är också för lite för att identifiera data. Bland cirka 77 000 slumpmässiga filer når sannolikheten att två av dem har samma CRC-32 redan 50 %, så använd den inte som unikt ID eller som nyckel för deduplicering. Där ingen angripare är inblandad är MD5 eller SHA-256 mycket bättre fingeravtryck.

CRC32 i kod

# Python: zlib.crc32 är utan förtecken (unsigned) i Python 3;
# "& 0xffffffff" behövs bara i Python 2
import zlib
format(zlib.crc32(b'123456789'), '08x')    # 'cbf43926'

// Node.js 20.15+ och 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 och java.util.zip.CRC32C sedan Java 9

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

Se upp med namnen i PHP: hashalgoritmen som heter crc32 är inte ZIP-kontrollsumman utan den CRC som bzip2 använder, utskriven i omvänd byteordning. Använd crc32b eller funktionen crc32() för att få samma resultat som ZIP, gzip och det här verktyget. Unix-kommandot cksum använder ytterligare en variant som dessutom blandar in filens längd, så dess tal stämmer inte med någon av dem.

Exempel

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

Vanliga frågor

Vad är CRC32 för "123456789"?
Den här strängen är standardindatan för att testa CRC-algoritmer. Dess CRC-32 är cbf43926 (3421780262 decimalt) och dess CRC-32C är e3069283. Om din egen implementation returnerar de här värdena använder den samma parametrar som det här verktyget.
Varför skiljer sig min CRC32 från ett annat verktygs?
Kontrollera fyra saker: varianten (CRC-32, CRC-32C, bzip2:s CRC och POSIX cksum ger alla olika resultat), indatans byte (radslut, en avslutande radbrytning, teckenkodningen), talformatet (vissa språk returnerar ett 32-bitars heltal med förtecken, vilket gör stora värden negativa) och byteordningen.
Varför är CRC-byten omvända i min ZIP- eller gzip-fil?
ZIP och gzip lagrar CRC-32 i byteordningen little-endian, så en hexeditor visar de fyra byten i omvänd ordning jämfört med den vanliga notationen. PNG lagrar den i big-endian. Det här verktyget, unzip -v och de flesta andra program skriver ut den mest signifikanta byten först.
Kan jag beräkna CRC32 för en stor fil?

Ja. Klicka på Öppna fil så beräknas kontrollsumman från filens byte på din enhet, utan att filen laddas upp; alla filer som webbläsaren kan hålla i minnet fungerar. Sedan kan du jämföra resultatet med värdet i en SFV-fil eller en ZIP-listning.

Är CRC32 en hashfunktion?

Den avbildar data av valfri längd på ett fast 32-bitarsvärde och listas därför ofta bland hashfunktioner, men den är en kontrollsumma: den upptäcker oavsiktliga fel och ger inget skydd mot någon som ändrar datan med flit. När du behöver ett starkare fingeravtryck visar tabellen Alla algoritmer under resultatet MD5 och SHA-familjen för samma indata.