Mikä tämä työkalu on?
CRC tulee sanoista Cyclic Redundancy Check, virheentunnistuskoodi, joka kuvattiin ensimmäisen kerran vuoden 1975 paperissa, jonka kirjoittivat W. Wesley Peterson ja D.T. Brown, ja joka myöhemmin muotoiltiin viitteissä kuten Ross Williamsin "A Painless Guide to CRC Error Detection Algorithms" ja ITU-T / ISO 3309 -standardeissa. CRC käsittelee viestin suurena binäärilukuna ja jakaa sen kiinteällä generaattoripolynomilla; jakojäännös on tarkistussumma. Koska polynomijako on halpa laskea sekä laitteistolla että ohjelmistolla, CRC:stä tuli oletusarvoinen virheentarkistus tallennus- ja siirtojärjestelmissä.
CRC-32 — tarkemmin sanoen variantti polynomilla 0xEDB88320, alkuarvolla 0xFFFFFFFF ja lopuksi XOR-operaatiolla 0xFFFFFFFF — on standardoitu IEEE 802.3:ssa (Ethernet) ja sitä käytetään tarkistussummana ZIP- ja gzip-arkistoissa, PNG-kuvatiedostoissa sekä lukemattomissa verkko- ja tallennusprotokollissa. Se on ylivoimaisesti kysytyin CRC-variantti, minkä vuoksi se on tämän työkalun oletusalgoritmi. CRC-16/CCITT-FALSE (polynomi 0x1021) ja CRC-16/MODBUS (polynomi 0x8005, käänteinen) ovat kaksi laajalti käytettyä 16-bittistä varianttia, joita löytyy sarjaprotokollista kuten Modbus RTU, XMODEM ja useista sulautettujen järjestelmien/teollisuuden viestintästandardeista.
On tärkeää ymmärtää, mitä CRC ei ole: se ei ole kryptografinen tiiviste. CRC:t ovat nopeita, lineaarisia funktioita ilman vastustuskykyä tahalliselle manipuloinnille — on suoraviivaista rakentaa eri viesti, joka tuottaa saman CRC-arvon. Ne ovat erinomaisia havaitsemaan satunnaisia bittivirheitä, joita aiheuttavat kohiseva siirtoyhteys, levyvirheet tai katkenneet lataukset, mutta ne eivät suojaa lainkaan hyökkääjältä, joka haluaa muokata dataa huomaamatta.
Miksi käyttää sitä?
- Rakennat Modbus RTU -ajuria ja slave-laite hylkää kehyksesi jatkuvasti — liitä tarkka tavusekvenssi tähän CRC-16/MODBUS valittuna tarkistaaksesi, vastaako firmwaresi CRC-rutiini referenssiarvoa ennen muun vianetsintää.
- Kirjoitit juuri CRC-32-taulukkogenerointirutiinin C:llä tai Rustilla alusta asti ja haluat tarkistaa sen — aja standardi "123456789" -testivektori tässä ja varmista, että saat 0xCBF43926, ennen kuin luotat toteutukseesi oikealla datalla.
- ZIP-purkutyökalu antaa CRC-ristiriitavirheen yhdestä tiedostosta etkä ole varma onko arkisto oikeasti vioittunut — laske puretun datan CRC-32 tässä uudelleen ja vertaa sitä ZIP:in local file header -arvoon.
- Toteutat XMODEMia tai vastaavaa sarjaprotokollaa ja spesifikaatio vain sanoo "lisää CRC-16" ilman tarkempaa selitystä — laske se tässä ensin, jotta tiedät miltä oikeiden lopputavujen pitäisi näyttää ennen lähetyskoodin vianetsintää.
- Perit sulautetun projektin, jossa on dokumentoimaton tarkistussummakenttä, ja epäilet sen olevan CRC-16/CCITT-FALSE eikä CRC-16/MODBUS — kokeile molempia variantteja tunnetulla hyötykuormalla ja katso kumpi vastaa laitteen todella lähettämää arvoa.
- 100% paikallinen: tekstisi tai tiedostosi käsitellään kokonaan JavaScriptillä selaimessasi, joten mitään ei ladata minnekään.
Käyttöohje
- Valitse "Teksti"-välilehti ja liitä tai kirjoita syötteesi, tai vaihda "Tiedosto"-välilehteen ja valitse tiedosto laitteeltasi.
- Valitse CRC-algoritmi: CRC-32 (IEEE 802.3, oletus ja yleisin), CRC-16/CCITT-FALSE, tai CRC-16/MODBUS.
- Tarkistussumma päivittyy automaattisesti, näytettynä heksadesimaalina, desimaalina ja binäärinä.
- Klikkaa "Kopioi" haluamasi tuloksen vieressä kopioidaksesi sen leikepöydälle.
Esimerkki
Syöte
123456789Tuloste
0xCBF43926 (3421780262)Tämä on standardi julkaistu CRC-32 (IEEE 802.3) -testivektori: ASCII-merkkijonon "123456789" CRC-32 on aina 0xCBF43926. Voit tarkistaa tämän työkalun tuloksen mitä tahansa muuta oikeaa CRC-32-toteutusta vasten juuri tällä merkkijonolla.
CRC vs. kryptografiset tiivisteet (MD5 / SHA)
Sekä CRC:t että kryptografiset tiivisteet pelkistävät datan kiinteän kokoiseksi sormenjäljeksi, mutta ne ratkaisevat eri ongelmia eivätkä ole keskenään vaihdettavissa.
| Ominaisuus | CRC (esim. CRC-32) | MD5 / SHA-256 |
|---|---|---|
| Tarkoitus | Havaita tahaton vioittuminen | Havaita tahallinen peukalointi / varmentaa eheys |
| Nopeus | Erittäin nopea, yksinkertainen laitteisto/ohjelmisto | Hitaampi, enemmän laskentaa tavua kohti |
| Törmäyskestävyys | Ei mitään — triviaali rakentaa tahallisesti | Suunniteltu laskennallisesti mahdottomaksi (SHA-256) tai murrettu (MD5) |
| Tyypillinen koko | 16 tai 32 bittiä | 128 bittiä (MD5) tai 256 bittiä (SHA-256) |
| Yleisiä käyttökohteita | ZIP/gzip, PNG, Ethernet, Modbus, tallennus | Tiedoston eheystarkistukset, digitaaliset allekirjoitukset, salasanojen tallennus (suolattuna) |
Kolme CRC-varianttia yhdellä silmäyksellä
Jokainen variantti määritellään polynomillaan, alkuarvollaan, sillä onko syöte/tuloste-bitit käännetty, ja lopullisella XOR:lla — mikä tahansa näistä väärin ja lasket teknisesti kelvollisen mutta yhteensopimattoman tarkistussumman.
| Variantti | Polynomi | Alkuarvo | Käännetty | Lopullinen XOR | Yleinen käyttö |
|---|---|---|---|---|---|
| CRC-32 (IEEE 802.3) | 0xEDB88320 | 0xFFFFFFFF | Kyllä (sisään & ulos) | 0xFFFFFFFF | ZIP, gzip, PNG, Ethernet |
| CRC-16/CCITT-FALSE | 0x1021 | 0xFFFF | Ei | 0x0000 | XMODEM, telekom-protokollat |
| CRC-16/MODBUS | 0x8005 | 0xFFFF | Kyllä (sisään & ulos) | 0x0000 | Modbus RTU -sarjakehykset |
Aiheeseen liittyvät työkalut
Jos tarvitset kryptografisen tarkistussumman virheentunnistus-CRC:n sijaan, nämä työkalut sopivat paremmin.
→ Monialgoritminen Hash-generaattori · MD5-generaattori · HMAC-generaattori
Usein kysytyt kysymykset
Mihin CRC:tä käytetään?
CRC (syklinen redundanssitarkistus) on virheentunnistuskoodi, joka liitetään datalohkoon, jotta vastaanottaja voi laskea sen uudelleen ja vahvistaa, ettei data vioittunut vahingossa tallennuksen tai siirron aikana. Se on sisäänrakennettu standardeihin kuten IEEE 802.3 Ethernet-kehystys, ZIP- ja gzip-tiedostomuodot, PNG-kuvat sekä monet sarja- ja teollisuusprotokollat kuten Modbus.
Onko CRC-32 sama kuin MD5 tai SHA-256?
Ei. CRC-32 on nopea, lineaarinen virheentunnistustarkistussumma ilman turvallisuusominaisuuksia — on triviaalia rakentaa tarkoituksella kaksi eri syötettä, joilla on sama CRC-32-arvo. MD5 ja SHA-256 ovat kryptografisia tiivistefunktioita, jotka on suunniteltu tekemään tällaisesta tahallisesta törmäyksestä laskennallisesti mahdotonta. Käytä CRC-32:ta tahattoman vioittumisen havaitsemiseen (naarmuuntunut levy, kadonnut verkkopaketti); käytä kryptografista tiivistettä [Hash-generaattoristamme](/hash-generator) tai [MD5-generaattorista](/md5-generator), kun tarvitset manipulointitodisteita tai eheystakuita hyökkääjää vastaan.
Mitä CRC-32-varianttia tämä työkalu käyttää?
IEEE 802.3 / ZIP / PNG -variantin: polynomi 0xEDB88320 (0x04C11DB7:n bitti-käänteinen muoto), alkuarvo 0xFFFFFFFF, sekä syöte että tuloste käänteisiä, ja lopuksi XOR-operaatio 0xFFFFFFFF. Tämä on Ethernetin, ZIP:in, gzipin ja PNG:n käyttämä variantti, ja se joka tuottaa 0xCBF43926 ASCII-merkkijonolle "123456789" — standardi julkaistu testivektori CRC-32-toteutuksen varmentamiseen.
Mikä ero on CRC-16/CCITT-FALSE:lla ja CRC-16/MODBUS:lla?
Molemmat ovat 16-bittisiä CRC:itä mutta eri polynomeilla ja parametreilla. CRC-16/CCITT-FALSE käyttää polynomia 0x1021 alkuarvolla 0xFFFF ilman bittikäännöstä; se on yleinen protokollissa kuten XMODEM ja useissa telekom-johdannaisissa standardeissa. CRC-16/MODBUS käyttää polynomia 0x8005 (käänteisenä 0xA001), myös alkuarvolla 0xFFFF, mutta syöte ja tuloste ovat käänteisiä — se on tarkistussumma, jonka Modbus RTU liittää jokaiseen sarjakehykseen. Ne tuottavat eri tuloksia samalle syötteelle, joten on tärkeää valita variantti, jota kohdeprotokollasi oikeasti määrittelee.
Voinko laskea tiedoston CRC:n, en pelkän tekstin?
Kyllä. Vaihda "Tiedosto"-välilehteen ja valitse tiedosto laitteeltasi — työkalu lukee sen raa'at tavut paikallisesti selaimessa (File API:n kautta) ja laskee tarkistussumman juuri niistä tavuista, samalla tavalla kuin ZIP- tai PNG-lukija tekisi.
Ladataanko dataani palvelimelle?
Ei. Sekä teksti- että tiedostolaskenta toimivat kokonaan asiakaspuolella JavaScriptillä käyttäen vakiomuotoista taulukkopohjaista CRC-algoritmia. Mitään kirjoittamaasi tai lataamaasi ei koskaan lähde selaimestasi.
Miksi itse kirjoittamani CRC-32-toteutus antaa eri tuloksen kuin tämä työkalu?
Yleisin syy on väärä alkuarvo, lopullinen XOR tai bittikäännösasetus — CRC-32 ei ole yksi kiinteä algoritmi, vaan parametrien perhe, ja tämän työkalun käyttämä IEEE 802.3/ZIP/PNG-variantti alkaa arvosta 0xFFFFFFFF, kääntää sekä syötteen että tulosteen, ja XORaa lopputuloksen arvolla 0xFFFFFFFF. Minkä tahansa näistä vaiheista ohittaminen tuottaa eri, teknisesti "kelvollisen" mutta yhteensopimattoman tarkistussumman. Testaa toteutuksesi "123456789" → 0xCBF43926 -vektoria vasten selvittääksesi mikä vaihe on väärin.
Onko tiedoston latauksella kokorajaa?
Työkalu ei aseta keinotekoista rajaa, mutta hyvin suuret tiedostot voivat olla hitaita, koska CRC lasketaan tavu tavulta JavaScriptillä selaimessasi. Tyypillisille firmware-tiedostoille, ZIP-elementeille tai protokollakehyksille — muutamasta tavusta kymmeniin megatavuihin — suorituskyky on käytännössä välitön.
Vaikuttaako välilyönnit tai rivinvaihtotyyli liitetyn tekstin CRC:hen?
Kyllä — CRC lasketaan syötteesi tarkoista tavuista, joten lopussa oleva rivinvaihto, ylimääräinen välilyönti tai Windows-tyylinen CRLF verrattuna Unix-tyyliseen LF-rivinvaihtoon tuottavat kaikki eri tarkistussumman, vaikka näkyvä teksti näyttäisi identtiseltä. Jos yrität täsmätä toisen työkalun tarkistussummaa, liitä tarkalleen se, minkä kyseinen työkalu tiivisti, mukaan lukien lopussa oleva välilyönti, tai käytä mieluummin Tiedosto-välilehteä vertaillaksesi raakoja tavuja suoraan.
Voiko kahdella täysin erilaisella tiedostolla olla sama CRC-32-arvo?
Kyllä, ja se on odotettua, ei vika — CRC-32:lla on vain 2^32 mahdollista tulostetta, joten törmäyksiä on matemaattisesti taattu esiintyvän tarpeeksi suurille datajoukoille, ja niitä on myös triviaalia rakentaa tahallisesti, koska CRC-32:lla ei ole kryptografista törmäyskestävyyttä. Juuri tästä syystä CRC-32 sopii hyvin tahattoman vioittumisen havaitsemiseen mutta ei sovellu varmentamaan, ettei tiedostoa ole peukaloitu.
Mitä CRC-varianttia pitäisi käyttää, jos protokolladokumentaatio ei määrittele parametreja?
Aloita variantista, joka liittyy vahvimmin kyseiseen protokollaperheeseen: CRC-16/MODBUS Modbus RTU -sarjaviestintään, CRC-16/CCITT-FALSE XMODEMiin ja moniin telekom-johdannaisiin protokolliin, ja CRC-32 (IEEE 802.3 -variantti) mihin tahansa ZIP-, gzip-, PNG- tai Ethernet-tyyppiseen. Jos kumpikaan ei täsmää tunnetusti toimivaan kehykseen oikealta laitteelta, protokolla saattaa käyttää epästandardia polynomia tai parametrijoukkoa, jota tämä työkalu ei kata.