CodeKitHub
Kódovacie nástroje

CRC Kalkulačka

Naposledy aktualizované:

CRC (cyklický redundantný súčet) je krátky kontrolný súčet pevnej dĺžky vypočítaný z bloku dát pomocou polynomiálneho delenia nad binárnym poľom — jeho účelom je zachytiť náhodné poškodenie dát, nie chrániť pred úmyselnou manipuláciou. Táto kalkulačka počíta kontrolný súčet výlučne v prehliadači pomocou štandardného tabuľkového CRC algoritmu: vlož text alebo nahraj malý súbor, vyber CRC-32 (IEEE 802.3 polynóm 0xEDB88320 používaný v zip, PNG a Ethernete), CRC-16/CCITT-FALSE alebo CRC-16/MODBUS a dostaneš výsledok okamžite v hexadecimálnej, desiatkovej a binárnej sústave. Nič, čo zadáš, sa nikdy neposiela na server.

Hexadecimal
Decimal
Binary

Č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

  1. 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.
  2. Vyber CRC algoritmus: CRC-32 (IEEE 802.3, predvolený a najbežnejší), CRC-16/CCITT-FALSE alebo CRC-16/MODBUS.
  3. Kontrolný súčet sa automaticky aktualizuje, zobrazený v hexadecimálnej, desiatkovej a binárnej sústave.
  4. Klikni na "Kopírovať" pri ktoromkoľvek výsledku, aby si ho skopíroval do schránky.

Príklad

Vstup

123456789

Vý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
ÚčelDetekcia náhodného poškodeniaDetekcia úmyselnej manipulácie / overenie integrity
RýchlosťExtrémne rýchle, jednoduchý hardvér/softvérPomalšie, viac výpočtu na bajt
Odolnosť voči kolíziámŽiadna — triviálne skonštruovateľná úmyselneNavrhnuté ako výpočtovo nemožné (SHA-256) alebo prelomené pre MD5
Typická veľkosť16 alebo 32 bitov128 bitov (MD5) alebo 256 bitov (SHA-256)
Bežné použitieZIP/gzip, PNG, Ethernet, Modbus, úložiskoKontrola 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.

VariantPolynómPočiatočná hodnotaReflektovanýZáverečný XORBežné použitie
CRC-32 (IEEE 802.3)0xEDB883200xFFFFFFFFÁno (vstup aj výstup)0xFFFFFFFFZIP, gzip, PNG, Ethernet
CRC-16/CCITT-FALSE0x10210xFFFFNie0x0000XMODEM, telekomunikačné protokoly
CRC-16/MODBUS0x80050xFFFFÁno (vstup aj výstup)0x0000Sé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.

Súvisiace nástroje