CRC-laskuri

Laske CRC-8/CCITT, CRC-16/CCITT-FALSE, CRC-16/MODBUS, CRC-32/ISO-HDLC (zlib/PNG/gzip-muoto), CRC-32C, CRC-32/BZIP2, CRC-32/MPEG-2, CRC-32/POSIX, cksum, CRC-64/XZ, CRC-64/ECMA-182, CRC-64/GO-ISO, CRC-64/REDIS tai Adler-32 tekstin, heksatavujen tai kokonaisten tiedostojen yli — useita parametrijoukkoja kerralla, ja tarkat parametrit (poly, init, refin, refout, xorout) tulostetaan jokaisen arvon viereen, joten yhteensopimattomuus ei ole koskaan arvoitus. Kryptografisia tiivisteitä (MD5/SHA-2/SHA-3/BLAKE2) varten katso Tiivistegeneraattori.
Toimii kokonaan paikallisesti — mitään ei ladata ylös. Tiedostoja enintään 200 MB.
Syöte: Tulos:
Algoritmit:
Rivit noudattavat muotoa “ALGORITMI  arvo”, jota seuraa sisennetty parametririvi, joten kopioitu tulos kertoo aina, mikä parametrijoukko sen tuotti.
Mitä CRC:tä tarvitaan?
Jos määritys sanoo vain “CRC-32”, se tarkoittaa lähes aina CRC-32/ISO-HDLC:tä — sitä, joka on zlibin, gzipin, PNG:n, ZIP:n ja Ethernetin sisällä. CRC-32C (Castagnoli) on nykyprosessorien laitteistokiihdytetty versio, jota käyttävät iSCSI, ext4, btrfs ja ZFS. cksum vastaa POSIX cksum-komentoa (se liittää tiedoston pituuden ennen jakoa). CRC-16/MODBUS on Modbus-laitteiden RTU-kehyksen tarkistussumma; CRC-16/CCITT-FALSE on yleinen älykorteissa. CRC-64/XZ esiintyy .xz-arkistoissa; Redis-klusteri käyttää CRC-64/REDIS:ia hash-lokeroihin. Adler-32 on zlibin nopea vaihtoehto CRC-32:lle. Jos kaksi työkalua ovat eri mieltä, vertaa niiden poly/init/xorout-rivejä — parametrijoukko, ei nimi, määrittää tuloksen.
Itsetesti
Ajaa sivun moottorit julkaistuja tarkistusarvoja (“123456789”) vastaan kaikille 14 parametrijoukolle, sekä heksa-jäsennys- ja desimaali-/oktaaliesitystarkistukset. Mitään ei lähetetä minnekään.
CRC — syklinen redundanssitarkistus, alusta asti selitettynä
Yhdessä lauseessa: CRC käsittelee datan yhtenä valtavana binääriluvuna, jakaa sen kiinteällä “generaattori”-luvulla käyttäen XOR:ia vähennyslaskun sijaan ja raportoi jakojäännöksen — tiiviin sormenjäljen, joka muuttuu rajusti jo yhden syötebitin kääntyessä, minkä vuoksi kaikki PNG-tiedostoista Modbus-johtoihin kantavat sellaisen.
Mikä CRC todellisuudessa on

Jakopiirros. Asettele tavut yhdeksi pitkäksi binääriluvuksi. Valitse jakaja — polynomi, esim. 0x04C11DB7 CRC-32:lle. Suorita binäärinen pitkä jako, jossa “vähennyslasku” on XOR-operaatio: aina kun juoksevan jäännöksen johtava bitti on 1, XOR-kytke jakaja, siirrä vasemmalle, toista. Kun koko viesti on kulkenut läpi, rekisteriin jäänyt on CRC. Ei avaimia eikä taulukoita määritelmässä — vain jako jäännöksellä.

Viisi parametria. Kaksi järjestelmää voivat molemmat sanoa “CRC-32” ja silti olla eri mieltä, koska pelkkä nimi ei määrää mitään. Täydellinen resepti tarvitsee viisi arvoa: poly (jakaja), init (mitä rekisteri aloittaa — kaikki nollat antavat alkunollatavujen kadota, kaikki ykköset eivät), refin/refout (käännetäänkö jokainen syötetavu — ja lopullinen rekisteri — bittijärjestyksessä, perintö sarjalaitteistoista, jotka lähettivät bitit vähiten merkitsevä ensin), ja xorout (lopullinen XOR-maski, jotta perässä oleva nollasarja muuttaa silti vastauksen). Tämä sivu tulostaa kaikki viisi jokaisen tuloksen viereen juuri tästä syystä.

Miksi se havaitsee virheitä. Hyvin valittu jakaja tekee viestin jäännöksen ja saman viestin jäännöksen, jossa muutama bitti on kääntynyt, eroavaksi ylivoimaisella todennäköisyydellä: hyvä CRC-32 tunnistaa kaikki 1- ja 2-bittiset virheet, kaikki pariton määrä bittivirheitä ja jokaisen enintään 32 peräkkäisen virheellisen bitin purskeen — taattuna, ei todennäköisyyksin. Tämä takuu koskee sattumanvaraista vaurioitumista, ja juuri se tekee CRC:stä oikean työkalun kohinaisille johdoille ja epävakaille levyille.

Mitä CRC ei ole

Ei kryptografinen tiiviste. Salaisuutta ei ole eikä yksisuuntaisuutta: kuka tahansa, joka tuntee parametrit, voi väärentää viestin millä tahansa CRC:llä millisekunneissa lisäämällä neljä korjaavaa tavua. CRC havaitsee sattumat, ei koskaan vastustajia. Latauksille, jotka tarkistat tuntemattomilta, allekirjoitukset ovat tärkeitä — katso sen sijaan Tiivistegeneraattori (MD5/SHA/BLAKE2). Sekin sivu selittää, miksi MD5 ja SHA-1 on vedetty pois vihamielisiin tilanteisiin, kun SHA-256 kestää.

Ei virheenkorjauskoodi. CRC kertoo, että jotain muuttui, ei mitä muuttui. Virheiden korjaaminen lennossa on koodien, kuten Reed–Solomon tai Hamming, tehtävä; ne tallentavat tarkoituksella ylimääräistä rakennetta, jonka dekooderi voi kääntää.

Ei pakkausta eikä salausta. Jäännös on muutama tavu syötteen koosta riippumatta, eikä siitä voi palauttaa syötettä — mutta toisin kuin kryptografisessa tiivisteessä, se johtuu vain siitä, että tietoa hävitettiin, ei siitä, että käänteinen laskeminen olisi vaikeaa.

Tämän sivun perheet

CRC-32-nelikko. Neljä tämän sivun merkintää jakavat polynomin 0x04C11DB7 ja tuottavat silti eri arvoja: ISO-HDLC (käännetty, alustus/xorout kaikki ykköset) on zlibin, gzipin, PNG:n ja ZIP:n “se” CRC-32; BZIP2 on sama matematiikka kääntämättömänä; MPEG-2 on BZIP2 ilman lopullista XOR:ia; POSIX alkaa nollasta ja on cksum-komennon perusta (joka lisäksi liittää tiedoston pituuden jakoon, joten tiedoston cksum ja saman tavujen CRC-32/POSIX eroavat). CRC-32C (Castagnoli, polynomi 0x1EDC6F41) on viides sisar: eri polynomi, valittu paremman virheidentunnistuksen takia, ja se, jonka nykyaikaiset x86- ja ARM-suorittimet voivat laskea muistin nopeudella yhdellä käskyllä.

CRC-64-nelikko. XZ käyttää ECMA-182-polynomia käännettynä kaikilla ykkösillä alustettuna ja xorout-maskilla; ECMA-182 itse on DLT-1-nauhastandardin kääntämätön nollalla alustettu alkuperäinen; GO-ISO on Go:n crc64.ISO, pieni poly 0x1B, yhä käännetty; REDIS käyttää polynomia, joka valittiin hyvän lavinavaikutuksen takia hash-lokeron osoituksessa. Kuusikymmentäneljä bittiä on koko, jossa CRC:itä aletaan käyttää hash-funktioina (lokerointiin) puhtaiden tarkistussummien sijaan.

Adler-32 on ulkopuolinen: se ei ole jakolasku lainkaan. Se summaa tavut (A, alkaen 1) ja summaa nämä summat (B), molemmat modulo 65521, ja yhdistää kaksi 16-bittistä summaa. Se on ohjelmistossa nopeampi kuin CRC-32, ja zlib käyttää sitä deflate-virroissa — mutta lyhyille syötteille (alle muutama sata tavua) summa kantaa liian vähän tietoa, minkä vuoksi zlib vaihtaa takaisin CRC-32:een pienille lohkoille.

CRC-8 ja CRC-16 säilyvät siellä, missä tavut ovat kalliita: CRC-8/CCITT (poly 0x07) suojaa yksittäisiä otsaketavuja SMBus- ja matkapuhelinradioprotokollissa; CRC-16/CCITT-FALSE suojaa älykorttilohkoja; CRC-16/MODBUS on jokaisen Modbus RTU -kehyksen tarkistussumma tehtaissa ympäri maailmaa.

Missä kukin elää
ParametrijoukkoLöytyy
CRC-32/ISO-HDLCzlib, gzip, PNG, ZIP, Ethernet (FCS), monet arkistomuodot
CRC-32CiSCSI, ext4, btrfs, ZFS, SSE4.2/ARMv8 laitteisto-CRC32C-käsky
CRC-32/BZIP2.bz2-arkistovirta
CRC-32/MPEG-2MPEG-2-kuljetusvirrat
CRC-32/POSIX & cksumPOSIX cksum-komennon tuloste (cksum file.txt)
CRC-16/MODBUSModbus RTU -kehykset (teolliset PLC:t, mittarit, invertterit)
CRC-16/CCITT-FALSEälykortit, X.25-tyyppiset linkit, joitakin GPS-protokollia
CRC-8/CCITTSMBus (PEC-tavu), matkapuhelinradion otsakkeet
CRC-64/XZ.xz-säilön eheystarkistukset
CRC-64/ECMA-182ECMA-182 / DLT-1-nauhastandardi
CRC-64/GO-ISOGo:n vakiokirjasto crc64.ISO
CRC-64/REDISRedis-klusterin hash-lokeron osoitus
Adler-32zlib-virrat (deflate), muut nopeiden tarkistussummien yhteydet
Ankkuritaulukko — check(“123456789”)

CRC-luettelon käytäntö on julkaista tulos ASCII-merkkijonolle 123456789 (9 tavua). Jokainen alla oleva arvo on toistettavissa tällä sivulla: kirjoita 123456789 Teksti-kenttään, valitse algoritmi ja napsauta Laske.

ParametrijoukkoLeveysTarkistusarvo (heksa)
CRC-8/CCITT80xf4
CRC-16/CCITT-FALSE160x29b1
CRC-16/MODBUS160x4b37
CRC-32/ISO-HDLC320xcbf43926
CRC-32C320xe3069283
CRC-32/BZIP2320xfc891918
CRC-32/MPEG-2320x0376e6e7
CRC-32/POSIX320x765e7680
cksum (POSIX command)320x377a6011
CRC-64/XZ640x995dc9bbdf1939fa
CRC-64/ECMA-182640x6c40df5f0b497347
CRC-64/GO-ISO640xb90956c775a41001
CRC-64/REDIS640xe9c6d914c4b8d9ca
Adler-32320x091e01de

Lähteet: jokainen arvo tarkistettiin riippumattomalla bittitason viitetoteutuksella ja, missä sellainen on, algoritmin toimittavaa järjestelmäkirjastoa vastaan (zlib CRC-32:lle ja Adler-32:lle; Greg Cookin CRC-luettelo muille).

Yleisiä virheitä
  • “CRC-32” ilman parametreja. ISO-HDLC:n, BZIP2:n, MPEG-2:n, POSIXin ja CRC-32C:n välillä kiertää viisi eri arvoa saman nimen alla. Tallenna aina poly/init/refin/refout/xorout tuloksen kanssa — tämä sivu tulostaa ne puolestasi.
  • Tiedoston CRC-32:n vertaaminen sen cksum-tulosteeseen. Eri algoritmit: cksum liittää pituuden ja käyttää eri alkuarvoa. Luvut eivät täsmää, ja molemmat ovat “oikein”.
  • CRC:n luottaminen väärennyksiä vastaan. Vastaavan CRC:n väärentäminen on oppikirjaharjoitus (korjaa viimeiset 4 tavua). Käytä avainnettua MAC:ia (HMAC) tai allekirjoitusta, kun toinen osapuoli voi olla vihamielinen.
  • Lavinavaikutuksen odottaminen. CRC on lineaarinen: toisiinsa liittyvät viestit antavat toisiinsa liittyvät CRC:t. Kohinalle sopii, tiivisteeseen ei — jos tarvitaan lokerointia, CRC-64 tai oikea tiiviste on turvallisempi kuin CRC-32.
  • Heksateksti vs. tavut. Merkkijono "123456789" (9 ASCII-tavua, 31 32 33 34 35 36 37 38 39) ja luku 0x123456789 ovat eri syötteitä eri CRC:illä. Käytä Heksatavut-välilehteä, kun lähdedata on todella binääristä.
UKK

Miksi CRC-32 ei täsmää ZIP-tiedoston CRC-32:n kanssa? ZIP:n CRC-32 on ISO-HDLC pakkaamattomalle datalle. Varmista, että tiivistit samat tavut (et pakattua virtaa), sama tila (Teksti vs. Heksa) ja sama parametrijoukko — jokaisen tuloksen alle tulostettu parametririvi on siellä, jotta tarkistus tapahtuu välittömästi.

Kumpi on parempi, CRC-32C vai CRC-32? Satunnaisten virheiden havaitsemiseen molemmat tunnistavat kaikki enintään 32 bitin purskeet; CRC-32C toimii paremmin joillakin virhekuvioilla ja on se, jolla on suorittimen käskyt — käytännössä ilmainen gigabitin nopeuksilla. Syy, miksi CRC-32/ISO-HDLC säilyy, on yhteensopivuus: kolmenkymmenen vuoden arkistot puhuvat sitä.

Onko CRC-64 vahvempi kuin CRC-32? Se havaitsee pidempiä purskeita (jopa 64 bittiä) ja törmää paljon harvemmin lokerointiin käytettynä, mutta se on yhtä helposti väärennettävissä — leveys tuo havaitsemistakuita, ei turvallisuutta.

Voiko CRC:n kääntää paljastaakseen syötteen? Ei — äärettömän monella syötteellä on sama CRC. Mutta toisin kuin kryptografisessa tiivisteessä, hyökkääjä voi rakentaa syötteen millä tahansa valitsemallaan CRC:llä, ja tässä mielessä se ei ole lainkaan yksisuuntainen.