CRC32 Sağlama Toplamı Hesaplayıcı

Metnin, onaltılık baytların veya bütün bir dosyanın CRC-32 ya da CRC-32C sağlama toplamını hesaplayın, sonucu hex, ondalık veya Base64 olarak görüntüleyin ve beklenen bir değerle karşılaştırın. Dosyalar yerel olarak okunur ve hiçbir zaman yüklenmez.

Tüm algoritmalar

Tamamen tarayıcınızda çalışır. Hiçbir veri yüklenmez.

Nasıl kullanılır

  1. Metni yazın veya yapıştırın, ham baytlar için girdi biçimini "Onaltılık" olarak değiştirin ya da içeriğinin sağlama toplamını almak için "Dosya aç" ile bir dosya açın.
  2. ZIP, gzip ve PNG için CRC-32'yi seçili bırakın; iSCSI, ext4, Btrfs ve Google Cloud Storage için CRC-32C'yi seçin.
  3. Çıktıyı seçin: "hex (küçük harf)", "HEX (büyük harf)", "Ondalık" veya "Base64".
  4. Doğrulamak için beklenen sağlama toplamını "Karşılaştırılacak değer" alanına 0x öneki olmadan hex, ondalık veya Base64 olarak yapıştırın.

CRC32 sağlama toplamı nedir?

Döngüsel artıklık denetimi (cyclic redundancy check, CRC), girdiyi tek ve uzun bir ikili polinom olarak ele alır, onu sabit bir üreteç polinomuna böler ve kalanı saklar. CRC-32'de kalan 32 bittir; genellikle 8 hex basamağı veya 0 ile 4.294.967.295 arasında işaretsiz bir sayı olarak yazılır. Veride yapılan neredeyse her değişiklik kalanı da değiştirir.

CRC'ler gerçek kabloların, telsiz bağlantılarının ve disklerin ürettiği hatalar için tasarlanmıştır. CRC-32, 32 bit uzunluğa kadar her ardışık bozuk bit dizisini (burst) tespit eder; rastgele bir bozulma ise yaklaşık 4,3 milyar durumda yalnızca bir kez fark edilmeden kalır. Hesaplanması da çok hızlıdır; ZIP, gzip, PNG ve Ethernet çerçevelerinde yerleşik olarak bulunmasının nedeni budur.

CRC-32 ve CRC-32C

CRC-32CRC-32C (Castagnoli)
Polinom0x04C11DB7, yansıtılmış hâli 0xEDB883200x1EDC6F41, yansıtılmış hâli 0x82F63B78
123456789 için kontrol değericbf43926e3069283
Kullanıldığı yerlerZIP, gzip, PNG, EthernetiSCSI, SCTP, ext4 meta verileri, Btrfs, Google Cloud Storage
Donanım desteğiARMv8 CRC32 komutlarıx86 SSE4.2 crc32 komutu, ARMv8

Her ikisi de 0xFFFFFFFF değerinden başlar, her baytın bitlerini en düşük anlamlı bitten başlayarak işler ve son değerin tüm bitlerini ters çevirir. Yalnızca polinom farklıdır; bu yüzden aynı veri birbiriyle ilgisiz iki sonuç verir. İlki, çoğu aracın "CRC32" derken kastettiği algoritmadır ve kataloglarda CRC-32/ISO-HDLC adıyla geçer. CRC-32C ise daha güçlü hata tespiti sağladığı için sonradan depolama ve ağ protokollerince benimsenmiştir. Google Cloud Storage CRC-32C değerini, Amazon S3 ise her iki varyantı da dört baytın big-endian sırasıyla Base64 kodlanmış hâli olarak bildirir; Base64 çıktısının gösterdiği de tam olarak budur.

Güvenlik denetimi değil, sağlama toplamı

CRC saldırılara karşı değil, kazalara karşı koruma sağlar. Doğrusal bir fonksiyon olduğundan herkes bir dosyayı değiştirip ardından dört baytı ayarlayarak CRC-32 değerini aynı tutabilir. Bu nedenle eşleşen bir CRC, kasıtlı bir müdahale konusunda hiçbir şey kanıtlamaz. İndirilen bir dosyayı kontrol etmek için güvenilir bir kaynaktan alınan SHA-256 hash değerini karşılaştırın; bir mesajı kimin gönderdiğini kanıtlamak için HMAC kullanın.

32 bit, veriyi tanımlamak için de çok azdır. Yaklaşık 77.000 rastgele dosya arasında ikisinin aynı CRC-32 değerini paylaşma olasılığı şimdiden %50'ye ulaşır; bu yüzden onu benzersiz bir kimlik veya tekilleştirme anahtarı olarak kullanmayın. Ortada bir saldırgan yoksa MD5 veya SHA-256 çok daha iyi parmak izleri sağlar.

Kodda CRC32

# Python: zlib.crc32, Python 3'te işaretsizdir;
# "& 0xffffffff" yalnızca Python 2 için gereklidir
import zlib
format(zlib.crc32(b'123456789'), '08x')    # 'cbf43926'

// Node.js 20.15+ ve 22.2+
require('zlib').crc32('123456789').toString(16).padStart(8, '0')   // 'cbf43926'

// Go (import "hash/crc32")
crc32.ChecksumIEEE(data)                                   // CRC-32
crc32.Checksum(data, crc32.MakeTable(crc32.Castagnoli))    // CRC-32C

// Java: java.util.zip.CRC32 ve Java 9'dan itibaren java.util.zip.CRC32C

// PHP
sprintf('%08x', crc32('123456789'));   // 'cbf43926'
hash('crc32b', '123456789');           // 'cbf43926', aynı CRC-32
hash('crc32c', '123456789');           // 'e3069283'
hash('crc32', '123456789');            // '181989fc', farklı bir CRC

PHP'deki adlara dikkat edin: crc32 adlı hash algoritması ZIP sağlama toplamı değil, bzip2'nin kullandığı ve ters bayt sırasıyla yazdırılan CRC'dir. ZIP, gzip ve bu araçla aynı sonucu almak için crc32b veya crc32() fonksiyonunu kullanın. Unix cksum komutu ise dosya uzunluğunu da hesaba katan başka bir varyant kullanır; bu yüzden onun verdiği sayı da eşleşmez.

Örnekler

Girdi (UTF-8)CRC-32
Hello, World!ec4ac3d0
Base64.is915d7207
你好50a2b841

Sıkça sorulan sorular

"123456789" dizesinin CRC32 değeri nedir?
Bu dize, CRC algoritmaları için standart test girdisidir. CRC-32 değeri cbf43926 (ondalık olarak 3421780262), CRC-32C değeri ise e3069283 olur. Kendi uygulamanız bu değerleri döndürüyorsa bu araçla aynı parametreleri kullanıyordur.
CRC32 değerim neden başka bir aracınkinden farklı?
Dört şeyi kontrol edin: varyant (CRC-32, CRC-32C, bzip2 CRC'si ve POSIX cksum birbirinden farklı sonuçlar verir), girdi baytları (satır sonları, sondaki bir satır sonu, metin kodlaması), sayı biçimi (bazı diller işaretli 32 bitlik bir tamsayı döndürür, bu da büyük değerleri negatif yapar) ve bayt sırası.
ZIP veya gzip dosyamdaki CRC baytları neden ters sırada?
ZIP ve gzip, CRC-32 değerini little-endian bayt sırasıyla saklar; bu yüzden bir hex düzenleyici dört baytı alışılmış gösterime göre ters sırada gösterir. PNG ise değeri big-endian olarak saklar. Bu araç, unzip -v ve diğer programların çoğu en anlamlı baytı önce yazdırır.
Büyük bir dosyanın CRC32 değerini hesaplayabilir miyim?

Evet. "Dosya aç" düğmesine tıkladığınızda sağlama toplamı, dosya yüklenmeden cihazınızda dosyanın baytlarından hesaplanır; tarayıcınızın bellekte tutabildiği her dosya işlenebilir. Ardından sonucu bir SFV dosyasındaki veya bir ZIP listesindeki değerle karşılaştırabilirsiniz.

CRC32 bir hash fonksiyonu mu?

Her uzunluktaki veriyi sabit 32 bitlik bir değere eşlediği için çoğu zaman hash fonksiyonlarıyla birlikte anılır, ancak bir sağlama toplamıdır: kazara oluşan hataları tespit eder, veriyi kasıtlı olarak değiştiren birine karşı ise hiçbir koruma sağlamaz. Daha güçlü bir parmak izine ihtiyacınız olduğunda, sonucun altındaki "Tüm algoritmalar" tablosu aynı girdi için MD5 ve SHA ailesini gösterir.