Bu Araç Nedir?
CRC, Cyclic Redundancy Check (Döngüsel Artıklık Denetimi) anlamına gelir; ilk kez W. Wesley Peterson ve D.T. Brown'ın 1975 tarihli makalesinde tanımlanmış, daha sonra Ross Williams'ın "A Painless Guide to CRC Error Detection Algorithms" adlı kaynağı ve ITU-T / ISO 3309 standartları gibi referanslarda resmileştirilmiş bir hata tespit kodudur. CRC, bir mesajı büyük bir ikili sayı olarak ele alır ve onu sabit bir üretici polinoma böler; bu bölmenin kalanı sağlama toplamıdır. Polinom bölmesi hem donanımda hem de yazılımda ucuza hesaplanabildiğinden, CRC depolama ve iletim sistemleri için varsayılan hata denetimi haline gelmiştir.
CRC-32 — özellikle 0xEDB88320 polinomlu, 0xFFFFFFFF başlangıç değerli ve 0xFFFFFFFF son XOR'lu varyant — IEEE 802.3'te (Ethernet) standartlaştırılmıştır ve ZIP ile gzip arşivlerinde, PNG görüntü dosyalarında ve sayısız ağ ile depolama protokolünde sağlama toplamı olarak kullanılır. En sık talep edilen CRC varyantı olduğu için bu araçtaki varsayılan algoritmadır. CRC-16/CCITT-FALSE (polinom 0x1021) ve CRC-16/MODBUS (polinom 0x8005, yansıtılmış), Modbus RTU, XMODEM gibi seri protokollerde ve çeşitli gömülü/endüstriyel iletişim standartlarında bulunan yaygın olarak kullanılan iki 16 bitlik varyanttır.
CRC'nin ne olmadığını anlamak önemlidir: bir kriptografik hash değildir. CRC'ler hızlı, doğrusal fonksiyonlardır ve kasıtlı manipülasyona karşı hiçbir direnç sağlamazlar — aynı CRC değerini üreten farklı bir mesaj oluşturmak oldukça kolaydır. Gürültülü iletim hatlarının, disk hatalarının veya yarıda kesilen indirmelerin neden olduğu türden rastgele bit hatalarını yakalamada mükemmeldirler, ancak verileri fark edilmeden değiştirmek isteyen bir saldırgana karşı hiçbir koruma sağlamazlar.
Neden Kullanmalısınız?
- Bir Modbus RTU sürücüsünü elle yazıyorsunuz ve slave cihaz çerçevelerinizi sürekli reddediyor — başka bir şeyi debug etmeden önce firmware'inizin CRC rutininin referans değerle eşleşip eşleşmediğini kontrol etmek için tam bayt dizisini CRC-16/MODBUS seçiliyken buraya yapıştırın.
- C veya Rust'ta sıfırdan bir CRC-32 tablo üretme rutini yazdınız ve mantık kontrolü yapmak istiyorsunuz — gerçek verilerde uygulamanıza güvenmeden önce standart "123456789" test vektörünü bu araçtan geçirip 0xCBF43926 aldığınızı doğrulayın.
- Bir ZIP çıkarma aracı bir girdide CRC uyuşmazlığı hatası veriyor ve arşivin gerçekten bozuk olup olmadığından emin değilsiniz — çıkarılan baytların CRC-32'sini burada yeniden hesaplayıp ZIP'in yerel dosya başlığında saklanan değerle karşılaştırın.
- XMODEM veya benzeri bir seri protokol uyguluyorsunuz ve spesifikasyon fazla ayrıntı vermeden sadece "CRC-16'yı ekle" diyor — iletim kodunuzu debug etmeye başlamadan önce doğru son baytların nasıl görünmesi gerektiğini bilmek için önce burada hesaplayın.
- Belgelenmemiş bir sağlama toplamı alanına sahip bir gömülü proje devraldınız ve bunun CRC-16/MODBUS değil CRC-16/CCITT-FALSE olduğundan şüpheleniyorsunuz — bilinen bir yük üzerinde her iki varyantı da deneyip cihazın gerçekte gönderdiği değerle hangisinin eşleştiğini görün.
- %100 yerel: metniniz veya dosyanız tamamen tarayıcınızda JavaScript ile işlenir, dolayısıyla hiçbir şey herhangi bir yere yüklenmez.
Nasıl Kullanılır
- "Text" sekmesini seçip girdinizi yapıştırın veya yazın, ya da "File" sekmesine geçip cihazınızdan bir dosya seçin.
- CRC algoritmasını seçin: CRC-32 (IEEE 802.3, varsayılan ve en yaygın olanı), CRC-16/CCITT-FALSE veya CRC-16/MODBUS.
- Sağlama toplamı otomatik olarak güncellenir ve onaltılık, ondalık ve ikili biçimde gösterilir.
- Herhangi bir sonucun yanındaki "Copy" düğmesine tıklayarak panonuza kopyalayın.
Örnek
Giriş
123456789Çıkış
0xCBF43926 (3421780262)Bu, standart olarak yayımlanmış CRC-32 (IEEE 802.3) test vektörüdür: "123456789" ASCII dizesinin CRC-32'si her zaman 0xCBF43926'dır. Bu aracın çıktısını, tam olarak bu dizeyi kullanarak başka herhangi bir doğru CRC-32 uygulamasıyla karşılaştırabilirsiniz.
CRC ile kriptografik hash'ler (MD5 / SHA) karşılaştırması
Hem CRC'ler hem de kriptografik hash'ler veriyi sabit boyutlu bir parmak izine indirger, ancak farklı sorunları çözerler ve birbirlerinin yerine kullanılamazlar.
| Özellik | CRC (örn. CRC-32) | MD5 / SHA-256 |
|---|---|---|
| Amaç | Kazara bozulmaları tespit etme | Kasıtlı müdahaleyi tespit etme / bütünlüğü doğrulama |
| Hız | Son derece hızlı, basit donanım/yazılım | Daha yavaş, bayt başına daha fazla hesaplama |
| Çakışma direnci | Yok — kasıtlı olarak kolayca tasarlanabilir | Hesaplama açısından imkansız olacak şekilde tasarlanmış (SHA-256) veya kırılmış (MD5) |
| Tipik boyut | 16 veya 32 bit | 128 bit (MD5) veya 256 bit (SHA-256) |
| Yaygın kullanımlar | ZIP/gzip, PNG, Ethernet, Modbus, depolama | Dosya bütünlüğü denetimleri, dijital imzalar, parola depolama (salt ile) |
İlgili araçlar
Hata tespit CRC'si yerine kriptografik bir sağlama toplamına ihtiyacınız varsa, bu araçlar daha uygundur.
Üç CRC varyantına genel bakış
Her varyant kendi polinomu, başlangıç değeri, girdi/çıktı bitlerinin yansıtılıp yansıtılmadığı ve son XOR ile tanımlanır — bunlardan herhangi birini yanlış yapmak, teknik olarak geçerli ama uyumsuz bir sağlama toplamı üretir.
| Varyant | Polinom | Başlangıç değeri | Yansıtılmış | Son XOR | Yaygın kullanım |
|---|---|---|---|---|---|
| CRC-32 (IEEE 802.3) | 0xEDB88320 | 0xFFFFFFFF | Evet (girdi ve çıktı) | 0xFFFFFFFF | ZIP, gzip, PNG, Ethernet |
| CRC-16/CCITT-FALSE | 0x1021 | 0xFFFF | Hayır | 0x0000 | XMODEM, telekom protokolleri |
| CRC-16/MODBUS | 0x8005 | 0xFFFF | Evet (girdi ve çıktı) | 0x0000 | Modbus RTU seri çerçeveleri |
Sıkça Sorulan Sorular
CRC ne için kullanılır?
CRC (döngüsel artıklık denetimi), alıcının yeniden hesaplayıp verinin depolama veya iletim sırasında kazara bozulmadığını doğrulayabilmesi için bir veri bloğuna eklenen bir hata tespit kodudur. IEEE 802.3 Ethernet çerçevelemesi, ZIP ve gzip dosya biçimleri, PNG görüntüleri ve Modbus gibi birçok seri ve endüstriyel protokol gibi standartların içine yerleştirilmiştir.
CRC-32, MD5 veya SHA-256 ile aynı mı?
Hayır. CRC-32, güvenlik özelliği olmayan hızlı, doğrusal bir hata tespit sağlama toplamıdır — aynı CRC-32 değerine sahip iki farklı girdiyi kasıtlı olarak oluşturmak çok kolaydır. MD5 ve SHA-256, bu tür kasıtlı çakışmaları hesaplama açısından imkansız hale getirmek için tasarlanmış kriptografik hash fonksiyonlarıdır. Kazara oluşan bozulmaları (çizilmiş bir disk, düşen bir ağ paketi) yakalamak için CRC-32 kullanın; bir saldırgana karşı değişiklik tespiti veya bütünlük garantisi gerektiğinde [Hash Üretici](/hash-generator) veya [MD5 Üretici](/md5-generator) aracımızdan bir kriptografik hash kullanın.
Bu araç hangi CRC-32 varyantını kullanıyor?
IEEE 802.3 / ZIP / PNG varyantı: polinom 0xEDB88320 (0x04C11DB7'nin bit yansıtılmış hali), başlangıç değeri 0xFFFFFFFF, girdi ve çıktı yansıtılmış, ve son XOR 0xFFFFFFFF. Bu, Ethernet, ZIP, gzip ve PNG tarafından kullanılan ve "123456789" ASCII dizesi için 0xCBF43926 üreten varyanttır — bir CRC-32 uygulamasını doğrulamak için standart olarak yayımlanmış test vektörü.
CRC-16/CCITT-FALSE ile CRC-16/MODBUS arasındaki fark nedir?
Her ikisi de 16 bitlik CRC'dir ancak farklı polinom ve parametrelere sahiptir. CRC-16/CCITT-FALSE, 0xFFFF başlangıç değerine sahip 0x1021 polinomunu kullanır ve bit yansıtması yoktur; XMODEM gibi protokollerde ve çeşitli telekom standartlarında yaygındır. CRC-16/MODBUS, yine 0xFFFF başlangıç değerine sahip 0x8005 (yansıtılmış hali 0xA001) polinomunu kullanır, ancak girdi ve çıktı yansıtılmıştır — Modbus RTU'nun her seri çerçeveye eklediği sağlama toplamıdır. Aynı girdi için farklı sonuçlar üretirler, bu yüzden hedef protokolünüzün gerçekte belirttiği varyantı seçmek önemlidir.
Sadece metin değil, bir dosyanın CRC'sini de hesaplayabilir miyim?
Evet. "File" sekmesine geçip cihazınızdan bir dosya seçin — araç, ham baytlarını tarayıcıda yerel olarak (File API aracılığıyla) okur ve sağlama toplamını, tıpkı bir ZIP veya PNG okuyucusunun yapacağı gibi tam olarak bu baytlar üzerinden hesaplar.
Verilerim bir sunucuya yükleniyor mu?
Hayır. Hem metin hem de dosya hesaplaması, standart tablo tabanlı bir CRC algoritması kullanılarak tamamen istemci tarafında JavaScript ile çalışır. Yazdığınız veya yüklediğiniz hiçbir şey tarayıcınızdan asla çıkmaz.
Elle yazdığım CRC-32 uygulamam neden bu araçtan farklı bir sonuç veriyor?
En yaygın neden, uyuşmayan bir başlangıç değeri, son XOR veya bit yansıtma ayarıdır — CRC-32 tek bir sabit algoritma değil, bir parametre ailesidir; bu aracın kullandığı IEEE 802.3/ZIP/PNG varyantı 0xFFFFFFFF ile başlar, hem girdiyi hem çıktıyı yansıtır ve son sonucu 0xFFFFFFFF ile XOR'lar. Bu adımlardan herhangi birini atlamak, teknik olarak geçerli ama uyumsuz farklı bir sağlama toplamı üretir. Hangi adımın yanlış olduğunu bulmak için uygulamanızı "123456789" → 0xCBF43926 vektörüne karşı test edin.
Dosya yükleme için bir boyut sınırı var mı?
Araç tarafından zorlanan yapay bir sınır yok, ancak CRC tarayıcınızda JavaScript ile bayt bayt hesaplandığından çok büyük dosyalar yavaş olabilir. Tipik firmware imajları, ZIP girdileri veya protokol çerçeveleri için — birkaç bayttan onlarca megabayta kadar — performans pratikte anındadır.
Boşluk veya satır sonu stili yapıştırılan metnin CRC'sini etkiler mi?
Evet — CRC girdinizin tam baytları üzerinden hesaplanır, bu yüzden görünen metin aynı görünse bile sondaki bir yeni satır, kaçak bir boşluk veya Windows tarzı CRLF ile Unix tarzı LF satır sonları farklı bir sağlama toplamı üretir. Başka bir araçtan bir sağlama toplamını eşleştiriyorsanız, o aracın hash'lediği şeyi sondaki boşluklar dahil tam olarak yapıştırın, ya da daha iyisi, ham baytları doğrudan karşılaştırmak için Dosya sekmesini kullanın.
Tamamen farklı iki dosya aynı CRC-32 değerine sahip olabilir mi?
Evet, ve bu beklenen bir durumdur, hata değil — CRC-32'nin sadece 2^32 olası çıktısı vardır, bu yüzden yeterince büyük veri setlerinde çakışmalar matematiksel olarak garantidir; ayrıca CRC-32'nin kriptografik çakışma direnci olmadığı için bunları kasıtlı olarak oluşturmak da kolaydır. Bu tam olarak CRC-32'nin kazara bozulmayı yakalamak için uygun olduğu ama bir dosyanın değiştirilmediğini doğrulamak için uygun olmadığı anlamına gelir.
Protokol belgeleri parametreleri belirtmiyorsa hangi CRC varyantını kullanmalıyım?
O protokol ailesiyle en çok ilişkilendirilen varyantla başlayın: Modbus RTU seri iletişimi için CRC-16/MODBUS, XMODEM ve birçok telekom kökenli protokol için CRC-16/CCITT-FALSE, ve ZIP, gzip, PNG veya Ethernet ile ilgili her şey için CRC-32 (IEEE 802.3 varyantı). Hiçbiri gerçek cihazdan bilinen iyi bir çerçeveyle eşleşmiyorsa, protokol bu aracın kapsamadığı standart dışı bir polinom veya parametre seti kullanıyor olabilir.