CRC Hesaplayıcı

Metin, onaltılık baytlar veya tüm dosyalar üzerinde CRC-8/CCITT, CRC-16/CCITT-FALSE, CRC-16/MODBUS, CRC-32/ISO-HDLC (zlib/PNG/gzip'in kullandığı), 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 veya Adler-32 hesaplayın — aynı anda birkaç parametre kümesiyle; her değerin yanında tam parametreler (poly, init, refin, refout, xorout) yazdırılır, böylece bir uyuşmazlık asla gizem olmaz. Kriptografik özetler (MD5/SHA-2/SHA-3/BLAKE2) için Özet Üretecine bakın.
Tamamen yerel çalışır — hiçbir şey yüklenmez. 200 MB'a kadar dosyalar.
Girdi: Çıktı:
Algoritmalar:
Satırlar “ALGORİTMA  değer” biçimini izler ve girintili bir parametre satırı izler; böylece kopyalanıp yapıştırılan bir sonuç her zaman hangi parametre kümesiyle üretildiğini söyler.
Hangi CRC'ye ihtiyacınız var?
Bir belirtim yalnızca “CRC-32” diyorsa neredeyse her zaman CRC-32/ISO-HDLC anlamına gelir — zlib, gzip, PNG, ZIP ve Ethernet'in içindekidir. CRC-32C (Castagnoli) modern işlemcilerdeki donanım hızlandırmalı olandır; iSCSI, ext4, btrfs ve ZFS kullanır. cksum, POSIX cksum komutuyla eşleşir (bölmeden önce dosya uzunluğunu ekler). CRC-16/MODBUS, Modbus cihazlarının RTU çerçeve sağlama toplamıdır; CRC-16/CCITT-FALSE akıllı kartlarda yaygındır. CRC-64/XZ .xz arşivlerinde görünür; Redis kümesi karma yuvaları için CRC-64/REDIS kullanır. Adler-32, zlib'in CRC-32'ye hızlı alternatifidir. İki araç anlaşmazsa, poly/init/xorout satırlarını karşılaştırın — sonucu tanımlayan ad değil, parametre kümesidir.
Öz test
Sayfa motorlarını, tüm 14 parametre kümesi için yayımlanan denetim değerlerine (“123456789”) karşı çalıştırır; ayrıca onaltılık ayrıştırma ve ondalık/sekizlik gösterim denetimleri yapar. Hiçbir şey bir yere gönderilmez.
CRC — döngüsel artıklık denetimi, sıfırdan açıklanmış
Tek cümlede: bir CRC verinizi tek bir dev ikili sayı gibi ele alır, çıkarma yerine XOR kullanarak sabit bir “üreteç” sayısına böler ve kalanı bildirir — girdinin tek bir biti bile değiştiğinde çarpıcı biçimde değişen kompakt bir parmak izi; PNG dosyalarından Modbus hatlarına kadar her şeyin bir CRC taşımasının nedeni budur.
CRC gerçekte nedir

Bölme resmi. Baytlarınızı tek uzun bir ikili sayı olarak hizalayın. Bir bölen seçin — polinom, ör. CRC-32 için 0x04C11DB7. “Çıkarma” işleminin XOR olduğu ikili uzun bölme yapın: çalışan kalanın en soldaki biti 1 olduğunda bölenle XOR alın, sola kaydırın, tekrarlayın. Tüm ileti geçtikten sonra yazmaçta kalan şey CRC'dir. Tanımda anahtar veya tablo yok — yalnızca kalanlı bölme.

Beş parametre. İki sistem de “CRC-32” diyebilir ve yine de anlaşamayabilir, çünkü ad tek başına hiçbir şeyi sabitlemez. Tam tarif beş değer gerektirir: poly (bölen), init (yazmaç neyle başlar — hepsi sıfır, baştaki sıfır baytların kaybolmasına izin verir, hepsi bir değil), refin/refout (her girdi baytının — ve son yazmacın — bitlerinin ters çevrilip çevrilmediği, en düşük anlamlı bitten önce gönderen seri donanımın mirası) ve xorout (sondaki sıfırların dizisinin yanıtı yine de değiştirmesi için son bir XOR maskesi). Bu sayfa, tam da bu nedenle her sonucun yanında beşini de yazdırır.

Neden hataları tespit eder. İyi seçilmiş bir bölen, bir iletinin kalanını ve aynı iletinin birkaç biti çevrilmiş haldeki kalanını çok yüksek olasılıkla farklı kılar: iyi bir CRC-32, tüm 1 bitlik ve 2 bitlik hataları, tek sayıdaki tüm bit hatalarını ve 32 ardışık bozulmuş bite kadar her patlamayı yakalar — olasılıksal olarak değil, garanti edilmiş olarak. Bu garanti kazara bozulmayla ilgilidir ve CRC'leri gürültülü hatlar ve kararsız diskler için doğru araç yapan şeydir.

CRC ne değildir

Kriptografik karma değildir. Gizli bir anahtar ve tek yönlülük yoktur: parametreleri bilen herkes, dört düzeltici bayt ekleyerek, milisaniyeler içinde istediği CRC'ye sahip bir ileti üretebilir. CRC kazaları tespit eder, asla düşmanları değil. Yabancılara karşı doğruladığınız indirmeler için imzalar önemlidir — bunun yerine Özet Üretecine (MD5/SHA/BLAKE2) bakın. Bu sayfa, düşmanca ortamlar için MD5 ve SHA-1'in neden emekli edildiğini, SHA-256'nın ise neden ayakta kaldığını da açıklar.

Hata düzeltme kodu değildir. Bir CRC size bir şeyin değiştiğini söyler, neyin değiştiğini değil. Hataları anında onarmak, bir çözücünün tersine çevirebileceği fazlalık yapıyı kasıtlı olarak saklayan Reed–Solomon veya Hamming gibi kodların işidir.

Sıkıştırma veya şifreleme değildir. Kalan, girdi boyutundan bağımsız olarak birkaç bayttır ve ondan girdiyi geri kurtaramazsınız — ama kriptografik bir karmadan farklı olarak bu yalnızca bilgi atıldığı için böyledir, tersine çevirme zor olduğu için değil.

Bu sayfadaki aileler

CRC-32 dörtlüsü. Bu sayfanın dört girdisi aynı 0x04C11DB7 polinomunu paylaşır ama yine de farklı değerler üretir: ISO-HDLC (yansıtılmış, init/xorout tüm birler) zlib, gzip, PNG ve ZIP'in “asıl” CRC-32'sidir; BZIP2 yansıtılmamış aynı matematiktir; MPEG-2, son XOR'u olmayan BZIP2'dir; POSIX sıfırdan başlar ve cksum komutunun temelidir (ayrıca bölmeye dosya uzunluğunu ekler, bu yüzden bir dosyanın cksum'ı ile aynı baytların CRC-32/POSIX'i farklıdır). CRC-32C (Castagnoli, poly 0x1EDC6F41) beşinci kardeştir: daha iyi hata tespit performansı için seçilmiş farklı bir polinom ve modern x86 ve ARM işlemcilerin tek bir komutla bellek hızında hesaplayabildiği olan.

CRC-64 dörtlüsü. XZ, tüm birler init ve xorout ile yansıtılmış biçimde ECMA-182 polinomunu kullanır; ECMA-182 kendisi DLT-1 teyp standardından, yansıtılmamış sıfır-init özgün halidir; GO-ISO, Go'nun crc64.ISO'sudur, küçük bir poly 0x1B, hâlâ yansıtılmış; REDIS, karma-yuva ataması için iyi çığ etkisi amacıyla seçilmiş bir polinom kullanır. Altmış dört bit, CRC'lerin saf sağlama toplamları yerine karma fonksiyonları (kovalama) olarak kullanılmaya başladığı boyuttur.

Adler-32 dışarıdan gelendir: hiç bölme yapmaz. Baytları toplar (A, 1'den başlayarak) ve bu toplamların toplamını alır (B); ikisi de 65521 modunda, ardından iki 16 bitlik toplamı birleştirir. Yazılımda CRC-32'den hızlıdır ve zlib deflate akışları için kullanır — ama kısa girdilerde (birkaç yüz bayttan az) toplam çok az bilgi taşır; zlib'in küçük bloklar için CRC-32'ye geri dönmesinin nedeni tam olarak budur.

CRC-8 ve CRC-16, baytların pahalı olduğu yerlerde varlığını sürdürür: CRC-8/CCITT (poly 0x07) SMBus ve hücresel radyo protokollerinde tek başlık baytlarını korur; CRC-16/CCITT-FALSE akıllı kart bloklarını korur; CRC-16/MODBUS, dünya çapındaki fabrika katlarındaki her Modbus RTU çerçevesinin sağlama toplamıdır.

Her birinin kullanıldığı yer
Parametre kümesiBulunduğu yer
CRC-32/ISO-HDLCzlib, gzip, PNG, ZIP, Ethernet (FCS), birçok arşiv biçimi
CRC-32CiSCSI, ext4, btrfs, ZFS, SSE4.2/ARMv8 donanım CRC32C komutu
CRC-32/BZIP2.bz2 arşiv akışı
CRC-32/MPEG-2MPEG-2 taşıma akışları
CRC-32/POSIX & cksumPOSIX cksum komut çıktısı (cksum file.txt)
CRC-16/MODBUSModbus RTU çerçeveleri (endüstriyel PLC'ler, sayaçlar, invertörler)
CRC-16/CCITT-FALSEakıllı kartlar, X.25'e yakın hatlar, bazı GPS protokolleri
CRC-8/CCITTSMBus (PEC baytı), hücresel radyo başlıkları
CRC-64/XZ.xz kapsayıcı bütünlük denetimleri
CRC-64/ECMA-182ECMA-182 / DLT-1 teyp standardı
CRC-64/GO-ISOGo standart kütüphanesi crc64.ISO
CRC-64/REDISRedis küme karma-yuva ataması
Adler-32zlib akışları (deflate), diğer hızlı sağlama toplamı bağlamları
Referans tablosu — check(“123456789”)

CRC kataloğu geleneği, ASCII dizgisi 123456789 (9 bayt) için sonuç yayımlamaktır. Aşağıdaki her değer bu sayfada yeniden üretilebilir: Metin kutusuna 123456789 yazın, algoritmayı işaretleyin ve Hesaplayın'a tıklayın.

Parametre kümesiGenişlikDenetim değeri (onaltılık)
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

Kaynaklar: her değer bağımsız bir bit düzeyinde referans uygulamasıyla ve, varsa, algoritmayı taşıyan sistem kütüphanesiyle (CRC-32 ve Adler-32 için zlib; diğerleri için Greg Cook CRC kataloğu) çapraz denetlenmiştir.

Yaygın hatalar
  • Parametresiz “CRC-32”. ISO-HDLC, BZIP2, MPEG-2, POSIX ve CRC-32C arasında, aynı ad altında beş farklı değer dolaşır. Sonucu her zaman poly/init/refin/refout/xorout ile birlikte kaydedin — bu sayfa bunları sizin için yazdırır.
  • Bir dosyanın CRC-32 değerini cksum çıktısıyla karşılaştırmak. Farklı algoritmalar: cksum uzunluğu ekler ve farklı bir init kullanır. Sayılar eşleşmez ve ikisi de “doğrudur”.
  • Kurcalamaya karşı CRC'ye güvenmek. Eşleşen bir CRC üretmek ders kitabı alıştırmasıdır (son 4 baytı yamalamak). Diğer taraf düşmanca olabilirse anahtarlı bir MAC (HMAC) veya imza kullanın.
  • Çığ etkisi beklemek. CRC doğrusaldır: ilişkili iletiler ilişkili CRC'ler verir. Gürültü için uygundur, karma için yanlıştır — kovalama gerekiyorsa CRC-64 veya gerçek bir karma, CRC-32'den daha güvenlidir.
  • Onaltılık metin ile baytlar. "123456789" dizgisi (9 ASCII bayt, 31 32 33 34 35 36 37 38 39) ile 0x123456789 sayısı farklı girdilerdir ve farklı CRC'lere sahiptir. Kaynak verileriniz gerçekten ikili olduğunda Onaltılık bayt sekmesini kullanın.
SSS

CRC-32'im neden ZIP dosyasındaki değerle eşleşmiyor? ZIP'in CRC-32'si, sıkıştırılmamış veri üzerinde ISO-HDLC'dir. Aynı baytları (sıkıştırılmış akışı değil), aynı kipi (Metin veya Onaltılık) ve aynı parametre kümesini karma yaptığınızdan emin olun — her sonucun altında yazdırılan parametre satırı bu denetimi anında yapmak içindir.

CRC-32C mi yoksa CRC-32 mi daha iyi? Kazara hata tespiti için ikisi de 32 bite kadar tüm patlamaları yakalar; CRC-32C bazı hata örüntülerinde daha iyi performans gösterir ve CPU komutlarına sahip olandır — gigabit hızlarında pratikte bedavadır. CRC-32/ISO-HDLC'nin hayatta kalmasının nedeni uyumluluktur: otuz yıllık arşivler bunu konuşur.

CRC-64, CRC-32'den daha mı güçlü? Daha uzun patlamaları (64 bite kadar) tespit eder ve kovalama için kullanıldığında çok daha az çakışır, ama yine de sahte üretilebilir — genişlik tespit garantileri sağlar, güvenlik sağlamaz.

Bir CRC, girdiyi ortaya çıkarmak için tersine çevrilebilir mi? Hayır — sonsuz sayıda girdi aynı CRC'yi paylaşır. Ama kriptografik bir karmadan farklı olarak, bir saldırgan seçtiği herhangi bir CRC'ye sahip bir girdi oluşturabilir; tek yönlü olmamasının anlamı budur.