Šta je CRC
Ciklična provera redundanse (cyclic redundancy check) posmatra poruku kao jedan dugačak binarni broj i deli ga fiksnim polinomom; ostatak je kontrolna suma. Obrnite bilo koji bit, ili bilo koji niz bitova kraći od CRC-a, i ostatak se menja, zbog čega CRC-ovi štite Ethernet okvire, ZIP stavke, PNG blokove, sektore diska i serijske protokole. Brzi su i u hardveru i u softveru, ali nisu kriptografski: svako može da napravi podatke sa izabranim CRC-om.
Zašto postoji toliko „CRC-16“ varijanti
Dve implementacije iste širine mogu da se razlikuju u pet parametara, a svaka kombinacija je drugačija kontrolna suma:
| Parametar | Značenje |
|---|---|
| Polinom | Delilac, zapisan bez najvišeg bita (0x1021 za CCITT, 0x04C11DB7 za CRC-32). |
| Init | Početna vrednost registra, 0 ili sve jedinice. |
| Refleksija ulaza | Da li se svaki ulazni bajt obrađuje počev od najmanje značajnog bita (da za CRC-32, MODBUS; ne za CCITT-FALSE, XMODEM). |
| Refleksija izlaza | Da li se bitovi završnog registra obrću. |
| XOR out | Završni XOR, obično 0 ili sve jedinice. |
Standardni način da se varijanta identifikuje je njena kontrolna vrednost: CRC ASCII niza 123456789. Tabela iznad je prikazuje za svaki model, a podrazumevani unos je upravo taj niz, pa ako vam uređaj da kontrolnu sumu za poznati sadržaj, možete je uporediti sa svim varijantama odjednom.
Uobičajeni izbori
- CRC-32 (0x04C11DB7, reflektovan): Ethernet, ZIP, gzip, PNG,
zlib.crc32,cksum -o 3. - CRC-32C (Castagnoli): iSCSI, SCTP, ext4 metapodaci, Btrfs, LevelDB; ima hardversku instrukciju na x86 i ARM-u, pa je brz izbor za nove dizajne.
- CRC-16/MODBUS: Modbus RTU preko serijske veze; CRC-16/CCITT-FALSE: Bluetooth, mnoge tvrdnje „CRC-CCITT“; CRC-16/XMODEM: XMODEM, Python
binascii.crc_hqx. - Adler-32: zlib tokovi; brži od CRC-a, ali slabiji za kratke ulaze.
Pitanja
Da li je CRC isto što i heš?
Ne. CRC otkriva slučajna oštećenja i može trivijalno da se obrne ili falsifikuje. Za integritet protiv napadača, ili za identifikovanje datoteka, koristite SHA-256. Za brzinu na pouzdanom kanalu CRC je sasvim dovoljan.
Moj uređaj daje drugačiji CRC-16 od ove stranice.
Postoji bar desetak CRC-16 varijanti. Unesite sadržaj za koji je uređaj izračunao kontrolnu sumu i uporedite njegovu vrednost sa svakim redom tabele; red koji se poklapa govori vam polinom, init i refleksiju koje uređaj koristi. Ako se nijedan ne poklapa, probajte prilagođeni model i proverite da li uređaj u podatke uključuje bajt dužine ili adresu.
Koji redosled bajtova ima rezultat?
CRC se prikazuje kao broj. Kada se upisuje u paket, protokol određuje redosled: MODBUS šalje prvo niži bajt, XMODEM prvo viši. Proverite specifikaciju ili primer okvira.
Šta je CRC-32C i zašto ga baze podataka koriste?
CRC-32 sa Castagnolijevim polinomom, koji ima bolja svojstva otkrivanja grešaka za veličine blokova koje skladišni sistemi koriste i implementiran je kao jedna CPU instrukcija (SSE4.2 crc32, ARMv8 CRC32C), što ga čini nekoliko puta bržim od klasičnog CRC-32.
Mogu li da računam CRC inkrementalno?
Da. Svi ovi CRC-ovi mogu da se nastave od prethodne vrednosti, tako radi zlib.crc32(data, previous). Ova stranica računa ceo unos odjednom.