Co je tento nástroj?
CRC znamená Cyclic Redundancy Check, kód pro detekci chyb poprvé popsaný v článku W. Wesleyho Petersona a D.T. Browna z roku 1975 a později formalizovaný v referencích jako „A Painless Guide to CRC Error Detection Algorithms“ od Rosse Williamse a standardech ITU-T / ISO 3309. CRC bere zprávu jako velké binární číslo a dělí ho pevným generujícím polynomem; zbytek tohoto dělení je kontrolní součet. Protože polynomiální dělení je levné jak v hardwaru, tak v softwaru, staly se CRC výchozím kontrolním mechanismem pro ukládací a přenosové systémy.
CRC-32 — konkrétně varianta s polynomem 0xEDB88320, počáteční hodnotou 0xFFFFFFFF a závěrečným XOR 0xFFFFFFFF — je standardizován v IEEE 802.3 (Ethernet) a používá se jako kontrolní součet uvnitř archivů ZIP a gzip, obrázků PNG a bezpočtu síťových a úložných protokolů. Je zdaleka nejčastěji požadovanou variantou CRC, proto je výchozím algoritmem v tomto nástroji. CRC-16/CCITT-FALSE (polynom 0x1021) a CRC-16/MODBUS (polynom 0x8005, zrcadlený) jsou dvě široce používané 16bitové varianty nalezené v sériových protokolech jako Modbus RTU, XMODEM a různých průmyslových/vestavných komunikačních standardech.
Je důležité chápat, co CRC není: není to kryptografický hash. CRC jsou rychlé lineární funkce bez odolnosti proti záměrné manipulaci — je snadné zkonstruovat jinou zprávu se stejnou hodnotou CRC. Skvěle odhalují náhodné bitové chyby způsobené šumem na přenosové lince, chybami disku nebo useknutými staženými soubory, ale neposkytují žádnou ochranu proti útočníkovi, který chce data nepozorovaně upravit.
Proč ho používat?
- Ladíte ovladač Modbus RTU a zařízení-slave pořád odmítá vaše rámce — vložte přesnou posloupnost bajtů sem s vybraným CRC-16/MODBUS a zkontrolujte, jestli CRC rutina firmwaru odpovídá referenční hodnotě, než začnete ladit cokoli dalšího.
- Právě jste od nuly napsali rutinu pro generování tabulky CRC-32 v C nebo Rustu a chcete si ji ověřit — pošlete standardní testovací řetězec „123456789“ tímto nástrojem a potvrďte, že dostanete 0xCBF43926, než implementaci nasadíte na skutečná data.
- Nástroj pro rozbalování ZIP hlásí chybu neshody CRC u jedné položky a nejste si jistí, jestli je archiv skutečně poškozený — přepočítejte CRC-32 rozbalených bajtů zde a porovnejte ho s hodnotou uloženou v lokální hlavičce souboru ZIP.
- Implementujete XMODEM nebo podobný sériový protokol a specifikace jen říká „připojte CRC-16“ bez dalšího vysvětlení — spočítejte ho tady nejdřív, abyste věděli, jak by měly správné koncové bajty vypadat, než začnete ladit vysílací kód.
- Zdědili jste vestavěný projekt s nezdokumentovaným polem kontrolního součtu a máte podezření, že jde o CRC-16/CCITT-FALSE místo CRC-16/MODBUS — vyzkoušejte obě varianty na známý payload a zjistěte, která odpovídá hodnotě, kterou zařízení skutečně posílá.
- 100% lokálně: text nebo soubor se zpracovává výhradně v JavaScriptu ve vašem prohlížeči, takže se nikam nenahrává.
Jak se používá
- Vyberte záložku „Text“ a vložte nebo napište vstup, nebo přepněte na záložku „Soubor“ a vyberte soubor ze zařízení.
- Vyberte CRC algoritmus: CRC-32 (IEEE 802.3, výchozí a nejběžnější), CRC-16/CCITT-FALSE nebo CRC-16/MODBUS.
- Kontrolní součet se automaticky aktualizuje, zobrazen v hexadecimální, decimální i binární podobě.
- Klikněte na „Kopírovat“ u jakéhokoli výsledku a zkopírujte ho do schránky.
Příklad
Vstup
123456789Výstup
0xCBF43926 (3421780262)Toto je standardní publikovaný testovací vektor CRC-32 (IEEE 802.3): CRC-32 řetězce ASCII „123456789“ je vždy 0xCBF43926. Výstup tohoto nástroje můžete ověřit proti jakékoli jiné správné implementaci CRC-32 pomocí právě tohoto řetězce.
CRC vs. kryptografické hashe (MD5 / SHA)
CRC i kryptografické hashe redukují data na otisk pevné délky, ale řeší jiné problémy a nejsou zaměnitelné.
| Vlastnost | CRC (např. CRC-32) | MD5 / SHA-256 |
|---|---|---|
| Účel | Detekce náhodného poškození | Detekce záměrné manipulace / ověření integrity |
| Rychlost | Extrémně rychlé, jednoduchý hardware/software | Pomalejší, více výpočtů na bajt |
| Odolnost proti kolizím | Žádná — triviálně zkonstruovatelná záměrně | Navrženo jako výpočetně nemožné (SHA-256) nebo prolomeno (MD5) |
| Typická velikost | 16 nebo 32 bitů | 128 bitů (MD5) nebo 256 bitů (SHA-256) |
| Běžné použití | ZIP/gzip, PNG, Ethernet, Modbus, úložiště | Kontrola integrity souborů, digitální podpisy, ukládání hesel (se solí) |
Tři varianty CRC na první pohled
Každá varianta je definovaná svým polynomem, počáteční hodnotou, tím, zda jsou bity vstupu/výstupu zrcadlené, a závěrečným XOR — spleťte si kterékoli z toho a dostanete technicky platný, ale nekompatibilní kontrolní součet.
| Varianta | Polynom | Počáteční hodnota | Zrcadlení | Závěrečný XOR | Běžné použití |
|---|---|---|---|---|---|
| CRC-32 (IEEE 802.3) | 0xEDB88320 | 0xFFFFFFFF | Ano (vstup i výstup) | 0xFFFFFFFF | ZIP, gzip, PNG, Ethernet |
| CRC-16/CCITT-FALSE | 0x1021 | 0xFFFF | Ne | 0x0000 | XMODEM, telekomunikační protokoly |
| CRC-16/MODBUS | 0x8005 | 0xFFFF | Ano (vstup i výstup) | 0x0000 | Sériové rámce Modbus RTU |
Související nástroje
Pokud potřebujete kryptografický kontrolní součet místo CRC pro detekci chyb, tyto nástroje se hodí lépe.
→ Generátor víceúčelového hashe · Generátor MD5 · Generátor HMAC
Časté dotazy
K čemu se CRC používá?
CRC (cyklický redundantní součet) je kód pro detekci chyb připojený k bloku dat, aby ho příjemce mohl znovu spočítat a potvrdit, že data nebyla náhodně poškozena při ukládání nebo přenosu. Je zabudovaný ve standardech jako IEEE 802.3 Ethernet framing, formáty souborů ZIP a gzip, obrázky PNG a mnoho sériových a průmyslových protokolů jako Modbus.
Je CRC-32 totéž co MD5 nebo SHA-256?
Ne. CRC-32 je rychlý, lineární kontrolní součet pro detekci chyb bez bezpečnostních vlastností — je triviální záměrně zkonstruovat dva různé vstupy se stejnou hodnotou CRC-32. MD5 a SHA-256 jsou kryptografické hashovací funkce navržené tak, aby byla taková záměrná kolize výpočetně nemožná. CRC-32 používejte k odhalení náhodného poškození (poškrábaný disk, ztracený síťový paket); kryptografický hash z našeho generátoru hashů nebo generátoru MD5 použijte, když potřebujete důkaz proti manipulaci nebo záruku integrity vůči útočníkovi.
Kterou variantu CRC-32 tento nástroj používá?
Variantu IEEE 802.3 / ZIP / PNG: polynom 0xEDB88320 (bitově zrcadlená forma 0x04C11DB7), počáteční hodnota 0xFFFFFFFF, zrcadlený vstup i výstup, a závěrečný XOR 0xFFFFFFFF. Je to varianta používaná Ethernetem, ZIP, gzip a PNG a ta, která dává 0xCBF43926 pro řetězec ASCII „123456789“ — standardní publikovaný testovací vektor pro ověření implementace CRC-32.
Jaký je rozdíl mezi CRC-16/CCITT-FALSE a CRC-16/MODBUS?
Obě jsou 16bitové CRC, ale s odlišnými polynomy a parametry. CRC-16/CCITT-FALSE používá polynom 0x1021 s počáteční hodnotou 0xFFFF a bez zrcadlení bitů; je běžný v protokolech jako XMODEM a různých telekomunikačních standardech. CRC-16/MODBUS používá polynom 0x8005 (zrcadlený jako 0xA001), rovněž s počáteční hodnotou 0xFFFF, ale se zrcadleným vstupem i výstupem — je to kontrolní součet, který Modbus RTU připojuje ke každému sériovému rámci. Pro stejný vstup dají odlišné výsledky, takže je důležité vybrat variantu, kterou cílový protokol skutečně specifikuje.
Můžu spočítat CRC souboru, ne jen textu?
Ano. Přepněte na záložku „Soubor“ a vyberte soubor ze zařízení — nástroj přečte jeho surové bajty lokálně v prohlížeči (přes File API) a spočítá kontrolní součet přesně z těchto bajtů, stejně jako by to udělal čtenář ZIP nebo PNG.
Jsou moje data nahrávána na server?
Ne. Výpočet textu i souboru probíhá výhradně na straně klienta v JavaScriptu pomocí standardního tabulkového CRC algoritmu. Nic, co napíšete nebo nahrajete, nikdy neopustí váš prohlížeč.
Proč moje vlastní implementace CRC-32 dává jiný výsledek než tento nástroj?
Nejčastější příčinou je neshoda v počáteční hodnotě, závěrečném XOR nebo nastavení zrcadlení bitů — CRC-32 není jeden pevný algoritmus, je to rodina parametrů, a varianta IEEE 802.3/ZIP/PNG používaná tímto nástrojem začíná na 0xFFFFFFFF, zrcadlí vstup i výstup a XORuje výsledek s 0xFFFFFFFF. Vynechání kteréhokoli z těchto kroků dá jiný, stejně „platný“, ale nekompatibilní kontrolní součet. Otestujte svou implementaci proti vektoru „123456789“ → 0xCBF43926, abyste izolovali, který krok chybí.
Existuje limit velikosti pro nahrání souboru?
Nástroj nevynucuje žádný umělý limit, ale u velmi velkých souborů může být výpočet pomalý, protože CRC se počítá bajt po bajtu v JavaScriptu ve vašem prohlížeči. Pro typické firmwarové obrazy, položky ZIP nebo rámce protokolů — od pár bajtů po desítky megabajtů — je výkon prakticky okamžitý.
Ovlivňují mezery nebo styl konce řádku CRC vloženého textu?
Ano — CRC se počítá z přesných bajtů vstupu, takže koncový nový řádek, přebytečná mezera nebo styl konce řádku Windows (CRLF) versus Unix (LF) daný přinesou odlišný kontrolní součet, i když viditelný text vypadá identicky. Pokud porovnáváte kontrolní součet z jiného nástroje, vložte přesně to, co daný nástroj hashoval, včetně případných koncových mezer, nebo lépe použijte záložku Soubor k přímému porovnání surových bajtů.
Můžou mít dva zcela odlišné soubory stejnou hodnotu CRC-32?
Ano, a je to očekávané, ne chyba — CRC-32 má jen 2^32 možných výstupů, takže kolize matematicky musí existovat pro dostatečně velké množiny dat, a jsou i triviální ke schválnímu zkonstruování, protože CRC-32 nemá žádnou kryptografickou odolnost proti kolizím. Přesně proto je CRC-32 vhodný k odhalení náhodného poškození, ale nevhodný k ověření, že soubor nebyl upraven.
Kterou variantu CRC použít, když dokumentace protokolu nespecifikuje parametry?
Začněte variantou nejvíc spojenou s danou rodinou protokolů: CRC-16/MODBUS pro sériovou komunikaci Modbus RTU, CRC-16/CCITT-FALSE pro XMODEM a mnoho protokolů odvozených z telekomunikací, a CRC-32 (varianta IEEE 802.3) pro cokoli spojené se ZIP, gzip, PNG nebo Ethernetem. Pokud ani jedna neodpovídá známě správnému rámci ze skutečného zařízení, protokol může používat nestandardní polynom nebo sadu parametrů mimo to, co tento nástroj pokrývá.