Calcolatore di checksum CRC32

Calcola il checksum CRC-32 o CRC-32C di un testo, di byte esadecimali o di un intero file, visualizzalo in esadecimale, decimale o Base64 e confrontalo con un valore atteso. I file vengono letti in locale e non vengono mai caricati.

Tutti gli algoritmi

Funziona interamente nel tuo browser. Non viene caricato nulla.

Come si usa

  1. Digita o incolla un testo, imposta Formato input su Esadecimale per inserire byte grezzi oppure apri un file per calcolare il checksum del suo contenuto.
  2. In Algoritmo lascia CRC-32 per ZIP, gzip e PNG, oppure scegli CRC-32C per iSCSI, ext4, Btrfs e Google Cloud Storage.
  3. In Formato output scegli hex (minuscole), HEX (maiuscole), Decimale o Base64.
  4. Per verificarlo, incolla il checksum atteso in Confronta con, in esadecimale senza 0x, in decimale o in Base64.

Che cos’è un checksum CRC32

Un controllo di ridondanza ciclico tratta l’input come un unico, lungo polinomio binario, lo divide per un polinomio generatore fisso e ne conserva il resto. Per CRC-32 il resto è di 32 bit, di solito scritto come 8 cifre esadecimali o come numero senza segno da 0 a 4.294.967.295. Quasi qualsiasi modifica ai dati cambia il resto.

I CRC sono pensati per gli errori prodotti nella realtà da cavi, collegamenti radio e dischi. CRC-32 rileva ogni raffica di bit errati lunga fino a 32 bit, e un danneggiamento casuale passa inosservato solo in circa un caso su 4,3 miliardi. È anche velocissimo da calcolare, ed è per questo che è integrato in ZIP, gzip, PNG e nei frame Ethernet.

CRC-32 e CRC-32C

CRC-32CRC-32C (Castagnoli)
Polinomio0x04C11DB7, riflesso 0xEDB883200x1EDC6F41, riflesso 0x82F63B78
Valore di controllo di 123456789cbf43926e3069283
Usato daZIP, gzip, PNG, EthernetiSCSI, SCTP, metadati ext4, Btrfs, Google Cloud Storage
Supporto hardwareIstruzioni CRC32 di ARMv8Istruzione crc32 di x86 SSE4.2, ARMv8

Entrambi partono da 0xFFFFFFFF, elaborano i bit di ogni byte a partire dal meno significativo e invertono il valore finale; cambia solo il polinomio, quindi gli stessi dati danno due risultati senza alcuna relazione tra loro. Il primo è ciò che la maggior parte degli strumenti intende per "CRC32" ed è catalogato come CRC-32/ISO-HDLC. CRC-32C è stato adottato in seguito da protocolli di storage e di rete per la sua migliore capacità di rilevare gli errori. Google Cloud Storage riporta il CRC-32C, e Amazon S3 l’una o l’altra variante, come Base64 dei quattro byte in ordine big-endian, ed è esattamente ciò che mostra l’output Base64.

Un checksum, non un controllo di sicurezza

Un CRC protegge dagli errori accidentali, non dagli attacchi. È una funzione lineare, quindi chiunque può modificare un file e poi ritoccare quattro byte per lasciarne invariato il CRC-32. Un CRC corrispondente, quindi, non dimostra nulla in caso di manomissione intenzionale. Per verificare un download confronta un hash SHA-256 ottenuto da una fonte attendibile; per dimostrare chi ha inviato un messaggio usa un HMAC.

Inoltre 32 bit sono troppo pochi per identificare dei dati. Già con circa 77.000 file casuali, la probabilità che due abbiano lo stesso CRC-32 raggiunge il 50%, quindi non usarlo come ID univoco o come chiave di deduplicazione. Quando non ci sono attaccanti in gioco, MD5 o SHA-256 sono impronte di gran lunga migliori.

CRC32 nel codice

# Python: zlib.crc32 restituisce un valore senza segno in Python 3;
# "& 0xffffffff" serve solo in Python 2
import zlib
format(zlib.crc32(b'123456789'), '08x')    # 'cbf43926'

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

// PHP
sprintf('%08x', crc32('123456789'));   // 'cbf43926'
hash('crc32b', '123456789');           // 'cbf43926', lo stesso CRC-32
hash('crc32c', '123456789');           // 'e3069283'
hash('crc32', '123456789');            // '181989fc', un CRC diverso

Attenzione ai nomi in PHP: l’algoritmo di hash chiamato crc32 non è il checksum di ZIP ma il CRC usato da bzip2, stampato con i byte in ordine inverso. Usa crc32b o la funzione crc32() per ottenere lo stesso risultato di ZIP, gzip e di questo strumento. Il comando Unix cksum usa un’altra variante ancora, che tiene conto anche della lunghezza del file, quindi il suo numero non corrisponderà a nessuno dei due.

Esempi

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

Domande frequenti

Qual è il CRC32 di "123456789"?
Questa stringa è l’input di test standard per gli algoritmi CRC. Il suo CRC-32 è cbf43926 (3421780262 in decimale) e il suo CRC-32C è e3069283. Se la tua implementazione restituisce questi valori, usa gli stessi parametri di questo strumento.
Perché il mio CRC32 è diverso da quello di un altro strumento?
Controlla quattro cose: la variante (CRC-32, CRC-32C, il CRC di bzip2 e cksum POSIX danno tutti risultati diversi), i byte di input (terminatori di riga, un carattere di nuova riga finale, la codifica del testo), il formato del numero (alcuni linguaggi restituiscono un intero a 32 bit con segno, per cui i valori grandi diventano negativi) e l’ordine dei byte.
Perché i byte del CRC sono invertiti nel mio file ZIP o gzip?
ZIP e gzip memorizzano il CRC-32 in ordine little-endian, quindi un editor esadecimale mostra i quattro byte al contrario rispetto alla notazione abituale. PNG invece lo memorizza in big-endian. Questo strumento, unzip -v e la maggior parte degli altri programmi stampano per primo il byte più significativo.
Posso calcolare il CRC32 di un file di grandi dimensioni?

Sì. Fai clic su Apri file e il checksum viene calcolato sui byte del file direttamente sul tuo dispositivo, senza caricarlo; funziona con qualsiasi file che il browser riesca a tenere in memoria. Puoi poi confrontare il risultato con il valore riportato in un file SFV o nell’elenco di un archivio ZIP.

CRC32 è una funzione di hash?

Trasforma dati di qualsiasi lunghezza in un valore fisso di 32 bit, per questo viene spesso elencato insieme agli hash, ma è un checksum: rileva gli errori accidentali e non offre alcuna protezione contro chi modifica i dati di proposito. Quando ti serve un’impronta più robusta, la tabella Tutti gli algoritmi sotto il risultato mostra MD5 e la famiglia SHA per lo stesso input.