Så använder du verktyget
- 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.
- Behåll CRC-32 för ZIP, gzip och PNG, eller välj CRC-32C för iSCSI, ext4, Btrfs och Google Cloud Storage.
- Välj format under Utdata som: hex (gemener), HEX (versaler), Decimaltal eller Base64.
- 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-32 | CRC-32C (Castagnoli) | |
|---|---|---|
| Polynom | 0x04C11DB7, reflekterat 0xEDB88320 | 0x1EDC6F41, reflekterat 0x82F63B78 |
Kontrollvärde för 123456789 | cbf43926 | e3069283 |
| Används av | ZIP, gzip, PNG, Ethernet | iSCSI, SCTP, ext4-metadata, Btrfs, Google Cloud Storage |
| Hårdvarustöd | CRC32-instruktionerna i ARMv8 | instruktionen 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.is | 915d7207 |
你好 | 50a2b841 |
Vanliga frågor
Vad är CRC32 för "123456789"?
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?
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?
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.