Informatica
Calcolatore di checksum CRC32, CRC16 e Adler-32
Scrivi un testo o incolla dei byte in esadecimale: ottieni in un colpo tutte le checksum più usate in reti, file e protocolli industriali, in esadecimale e in decimale, e puoi verificare un valore atteso.
A che cosa servono le checksum
Una checksum è un numero breve calcolato dai dati che cambia se cambia anche un solo bit. Chi riceve ricalcola il valore e lo confronta con quello trasmesso: se differiscono, i dati si sono rovinati per strada. Il CRC-32 di «123456789» è CBF43926, il valore di controllo con cui si verifica un'implementazione.
Algoritmi diversi servono in contesti diversi. CRC-32 è quello di ZIP, PNG ed Ethernet; CRC-32C di iSCSI, ext4 e Btrfs; CRC-16/MODBUS dei dispositivi industriali Modbus RTU; CRC-16/CCITT e XMODEM di protocolli seriali e schede; Adler-32 della compressione zlib, più veloce ma più debole su dati brevi.
Le varianti di CRC-16 sono tante perché cambiano polinomio, valore iniziale, riflessione dei bit e XOR finale: per questo lo stesso messaggio dà risultati diversi. Se hai un valore da verificare e non sai quale algoritmo è stato usato, incollalo nel campo del valore atteso e la calcolatrice cerca quello che corrisponde.
Errori frequenti
- Calcolare la checksum del testo invece che dei byte: "0A" come testo sono due caratteri, come esadecimale un solo byte.
- Confondere le varianti di CRC-16: MODBUS, ARC e CCITT danno risultati diversi sugli stessi dati.
- Usare un CRC per verificare download da fonti non fidate: si può falsificare facilmente, serve SHA-256.
Domande frequenti
Perché il CRC di Modbus sembra con i byte invertiti?
Modbus trasmette il CRC con il byte basso per primo. Se il valore calcolato è 4B37, nel messaggio compaiono i byte 37 4B.
Che differenza c'è fra CRC-32 e CRC-32C?
Usano polinomi diversi: quello di Castagnoli (32C) rileva meglio certi errori e ha istruzioni dedicate nei processori moderni, per questo è preferito in archiviazione e reti veloci.
Una checksum può essere uguale per due file diversi?
Sì: con 32 bit ci sono circa 4 miliardi di valori, quindi collisioni casuali sono possibili su grandi quantità di file, e costruirle apposta è banale.
Come funziona questo calcolo
CRC: i dati sono trattati come un polinomio sui bit e diviso per un polinomio generatore; il resto è la checksum. Ogni variante è definita da larghezza, polinomio, valore iniziale, riflessione di input e output e XOR finale (per esempio CRC-32: 32 bit, 0x04C11DB7, iniziale 0xFFFFFFFF, riflesso, XOR 0xFFFFFFFF). Adler-32: A = 1 + somma dei byte, B = somma dei valori progressivi di A, entrambi modulo 65521, risultato B·65536 + A. Fletcher-16: lo stesso con modulo 255 e senza l'1 iniziale.