Čo je tento nástroj?
CRC znamená Cyclic Redundancy Check (cyklický redundantný súčet), kód na detekciu chýb prvýkrát opísaný v práci W. Wesleyho Petersona a D.T. Browna z roku 1975, neskôr formalizovaný v prameňoch ako "A Painless Guide to CRC Error Detection Algorithms" od Rossa Williamsa a normy ITU-T / ISO 3309. CRC berie správu ako veľké binárne číslo a delí ho pevným generujúcim polynómom; zvyšok tohto delenia je kontrolný súčet. Keďže polynomiálne delenie je lacné na výpočet v hardvéri aj softvéri, CRC sa stal predvoleným spôsobom kontroly chýb pri ukladaní a prenose dát.
CRC-32 — konkrétne variant s polynómom 0xEDB88320, počiatočnou hodnotou 0xFFFFFFFF a záverečným XOR 0xFFFFFFFF — je štandardizovaný v IEEE 802.3 (Ethernet) a používa sa ako kontrolný súčet vo formátoch ZIP a gzip, obrázkoch PNG a nespočetných sieťových a úložných protokoloch. Je zďaleka najžiadanejším CRC variantom, preto je predvoleným algoritmom v tomto nástroji. CRC-16/CCITT-FALSE (polynóm 0x1021) a CRC-16/MODBUS (polynóm 0x8005, reflektovaný) sú dva rozšírené 16-bitové varianty používané v sériových protokoloch ako Modbus RTU, XMODEM a rôznych priemyselných/embedded komunikačných štandardoch.
Je dôležité pochopiť, čím CRC nie je: nie je to kryptografický hash. CRC sú rýchle, lineárne funkcie bez odolnosti voči úmyselnej manipulácii — je jednoduché skonštruovať inú správu, ktorá dá rovnakú hodnotu CRC. Sú výborné pri zachytávaní náhodných preklopení bitov spôsobených zašumenými prenosovými linkami, chybami disku alebo skrátenými sťahovaniami, no neposkytujú žiadnu ochranu proti útočníkovi, ktorý chce dáta upraviť bez odhalenia.
Prečo ho používať?
- Programuješ ovládač Modbus RTU na úrovni bitov a zariadenie slave stále odmieta tvoje rámce — vlož sem presnú sekvenciu bajtov s vybraným CRC-16/MODBUS a over, či CRC rutina vo firmvéri sedí s referenčnou hodnotou, skôr než začneš ladiť čokoľvek iné.
- Práve si napísal rutinu na generovanie CRC-32 tabuľky od nuly v C alebo Ruste a chceš si ju overiť — pusti štandardný testovací vektor "123456789" cez tento nástroj a potvrď, že dostaneš 0xCBF43926, skôr než dôveruješ svojej implementácii na reálnych dátach.
- Nástroj na rozbaľovanie ZIP hlási chybu nezhody CRC pri jednej položke a nie si si istý, či je archív naozaj poškodený — prepočítaj tu CRC-32 extrahovaných bajtov a porovnaj ho s hodnotou uloženou v lokálnej hlavičke súboru v ZIP-e.
- Implementuješ XMODEM alebo podobný sériový protokol a špecifikácia len hovorí "pridaj CRC-16" bez ďalších podrobností — vypočítaj ho tu najprv, aby si vedel, ako by mali vyzerať správne koncové bajty, skôr než začneš ladiť vysielací kód.
- Zdedil si embedded projekt s nezdokumentovaným poľom kontrolného súčtu a tušíš, že ide o CRC-16/CCITT-FALSE, nie CRC-16/MODBUS — vyskúšaj oba varianty na známej dátovej záťaži a zisti, ktorý sedí s hodnotou, ktorú zariadenie naozaj posiela.
- 100% lokálne: tvoj text alebo súbor sa spracúva výlučne v JavaScripte v prehliadači, takže sa nikam nenahráva.
Ako sa používa
- Vyber záložku "Text" a vlož alebo napíš vstup, alebo prepni na záložku "Súbor" a vyber súbor zo svojho zariadenia.
- Vyber CRC algoritmus: CRC-32 (IEEE 802.3, predvolený a najbežnejší), CRC-16/CCITT-FALSE alebo CRC-16/MODBUS.
- Kontrolný súčet sa automaticky aktualizuje, zobrazený v hexadecimálnej, desiatkovej a binárnej sústave.
- Klikni na "Kopírovať" pri ktoromkoľvek výsledku, aby si ho skopíroval do schránky.
Príklad
Vstup
123456789Výstup
0xCBF43926 (3421780262)Toto je štandardný publikovaný testovací vektor pre CRC-32 (IEEE 802.3): CRC-32 reťazca ASCII "123456789" je vždy 0xCBF43926. Výstup tohto nástroja môžeš overiť oproti akejkoľvek inej správnej implementácii CRC-32 pomocou presne tohto reťazca.
CRC vs. kryptografické hashe (MD5 / SHA)
CRC aj kryptografické hashe redukujú dáta na odtlačok pevnej veľkosti, ale riešia odlišné problémy a nie sú zameniteľné.
| Vlastnosť | CRC (napr. CRC-32) | MD5 / SHA-256 |
|---|---|---|
| Účel | Detekcia náhodného poškodenia | Detekcia úmyselnej manipulácie / overenie integrity |
| Rýchlosť | Extrémne rýchle, jednoduchý hardvér/softvér | Pomalšie, viac výpočtu na bajt |
| Odolnosť voči kolíziám | Žiadna — triviálne skonštruovateľná úmyselne | Navrhnuté ako výpočtovo nemožné (SHA-256) alebo prelomené pre MD5 |
| Typická veľkosť | 16 alebo 32 bitov | 128 bitov (MD5) alebo 256 bitov (SHA-256) |
| Bežné použitie | ZIP/gzip, PNG, Ethernet, Modbus, úložisko | Kontrola integrity súborov, digitálne podpisy, ukladanie hesiel (so salt) |
Tri CRC varianty v skratke
Každý variant je definovaný svojím polynómom, počiatočnou hodnotou, tým, či sú vstupné/výstupné bity reflektované, a záverečným XOR — pomýliš ktorýkoľvek z nich a vypočítaš technicky platný, ale nekompatibilný kontrolný súčet.
| Variant | Polynóm | Počiatočná hodnota | Reflektovaný | Záverečný XOR | Bežné použitie |
|---|---|---|---|---|---|
| CRC-32 (IEEE 802.3) | 0xEDB88320 | 0xFFFFFFFF | Áno (vstup aj výstup) | 0xFFFFFFFF | ZIP, gzip, PNG, Ethernet |
| CRC-16/CCITT-FALSE | 0x1021 | 0xFFFF | Nie | 0x0000 | XMODEM, telekomunikačné protokoly |
| CRC-16/MODBUS | 0x8005 | 0xFFFF | Áno (vstup aj výstup) | 0x0000 | Sériové rámce Modbus RTU |
Súvisiace nástroje
Ak potrebuješ kryptografický kontrolný súčet namiesto CRC na detekciu chýb, tieto nástroje sa hodia lepšie.
→ Multi-Algoritmový Generátor Hashov · Generátor MD5 · Generátor HMAC
Časté otázky
Na čo sa CRC používa?
CRC (cyklický redundantný súčet) je kód na detekciu chýb pripojený k bloku dát, aby ho príjemca mohol prepočítať a potvrdiť, že dáta neboli náhodne poškodené počas ukladania alebo prenosu. Je zabudovaný do štandardov ako Ethernet rámcovanie IEEE 802.3, formáty súborov ZIP a gzip, obrázky PNG a mnoho sériových a priemyselných protokolov ako Modbus.
Je CRC-32 to isté ako MD5 alebo SHA-256?
Nie. CRC-32 je rýchly, lineárny kontrolný súčet na detekciu chýb bez bezpečnostných vlastností — je triviálne úmyselne skonštruovať dva rôzne vstupy s rovnakou hodnotou CRC-32. MD5 a SHA-256 sú kryptografické hashovacie funkcie navrhnuté tak, aby tento druh úmyselnej kolízie bol výpočtovo nemožný. CRC-32 používaj na zachytenie náhodného poškodenia (poškriabaný disk, zahodený sieťový paket); kryptografický hash z nášho [Generátora Hashov](/hash-generator) alebo [Generátora MD5](/md5-generator) použi, keď potrebuješ dôkaz o manipulácii alebo záruky integrity proti útočníkovi.
Ktorý variant CRC-32 tento nástroj používa?
Variant IEEE 802.3 / ZIP / PNG: polynóm 0xEDB88320 (bitovo reflektovaná forma 0x04C11DB7), počiatočná hodnota 0xFFFFFFFF, reflektovaný vstup aj výstup a záverečný XOR 0xFFFFFFFF. Toto je variant používaný Ethernetom, ZIP-om, gzipom a PNG, a ten, ktorý pre reťazec ASCII "123456789" dáva 0xCBF43926 — štandardný publikovaný testovací vektor na overenie implementácie CRC-32.
Aký je rozdiel medzi CRC-16/CCITT-FALSE a CRC-16/MODBUS?
Oba sú 16-bitové CRC, ale s odlišnými polynómami a parametrami. CRC-16/CCITT-FALSE používa polynóm 0x1021 s počiatočnou hodnotou 0xFFFF a bez reflektovania bitov; je bežný v protokoloch ako XMODEM a rôznych telekomunikačných štandardoch. CRC-16/MODBUS používa polynóm 0x8005 (reflektovaný ako 0xA001), tiež s počiatočnou hodnotou 0xFFFF, ale s reflektovaným vstupom aj výstupom — je to kontrolný súčet, ktorý Modbus RTU pridáva ku každému sériovému rámcu. Pre rovnaký vstup dajú odlišné výsledky, preto je dôležité vybrať variant, ktorý tvoj cieľový protokol skutočne špecifikuje.
Môžem vypočítať CRC súboru, nielen textu?
Áno. Prepni na záložku "Súbor" a vyber súbor zo svojho zariadenia — nástroj načíta jeho surové bajty lokálne v prehliadači (cez File API) a vypočíta kontrolný súčet presne z týchto bajtov, rovnako ako by to urobil čítač ZIP alebo PNG.
Nahrávajú sa moje dáta na server?
Nie. Výpočet z textu aj zo súboru prebieha výlučne na strane klienta v JavaScripte pomocou štandardného tabuľkového CRC algoritmu. Nič, čo napíšeš alebo nahráš, nikdy neopustí tvoj prehliadač.
Prečo moja vlastnoručne napísaná implementácia CRC-32 dáva iný výsledok ako tento nástroj?
Najčastejšou príčinou je nesúlad v počiatočnej hodnote, záverečnom XOR alebo nastavení reflektovania bitov — CRC-32 nie je jeden pevný algoritmus, je to rodina parametrov, a variant IEEE 802.3/ZIP/PNG používaný týmto nástrojom začína na 0xFFFFFFFF, reflektuje vstup aj výstup a robí XOR výsledku s 0xFFFFFFFF. Vynechanie ktoréhokoľvek z týchto krokov dá odlišný, technicky rovnako "platný", ale nekompatibilný kontrolný súčet. Otestuj svoju implementáciu na vektore "123456789" → 0xCBF43926, aby si zistil, ktorý krok nesedí.
Existuje limit veľkosti pre nahrávanie súborov?
Nástroj neuplatňuje žiadny umelý limit, ale veľmi veľké súbory môžu byť pomalé, keďže CRC sa počíta bajt po bajte v JavaScripte v tvojom prehliadači. Pre bežné firmvérové obrazy, položky ZIP alebo protokolové rámce — od pár bajtov po desiatky megabajtov — je výkon prakticky okamžitý.
Ovplyvňujú medzery alebo štýl konca riadka CRC vloženého textu?
Áno — CRC sa počíta z presných bajtov tvojho vstupu, takže koncový nový riadok, blúdiaca medzera alebo Windows štýl CRLF oproti Unix štýlu LF konca riadka dajú vždy odlišný kontrolný súčet, aj keď viditeľný text vyzerá identicky. Ak porovnávaš kontrolný súčet z iného nástroja, vlož presne to, čo ten nástroj hashoval, vrátane akýchkoľvek koncových medzier, alebo radšej použi záložku Súbor na priame porovnanie surových bajtov.
Môžu mať dva úplne odlišné súbory rovnakú hodnotu CRC-32?
Áno, a je to očakávané, nie chyba — CRC-32 má len 2^32 možných výstupov, takže kolízie sú matematicky zaručené pri dostatočne veľkých dátových sadách a sú aj triviálne úmyselne skonštruovateľné, keďže CRC-32 nemá žiadnu kryptografickú odolnosť voči kolíziám. Presne preto je CRC-32 vhodný na zachytenie náhodného poškodenia, ale nevhodný na overenie, že súbor nebol upravený.
Ktorý CRC variant mám použiť, ak dokumentácia protokolu neuvádza parametre?
Začni variantom najviac spájaným s danou rodinou protokolov: CRC-16/MODBUS pre sériovú komunikáciu Modbus RTU, CRC-16/CCITT-FALSE pre XMODEM a mnoho telekomunikačne odvodených protokolov, a CRC-32 (variant IEEE 802.3) pre čokoľvek súvisiace so ZIP, gzip, PNG alebo Ethernetom. Ak žiadny nesedí so známym správnym rámcom zo skutočného zariadenia, protokol môže používať neštandardný polynóm alebo sadu parametrov mimo toho, čo tento nástroj pokrýva.