Cara menggunakan
- Ketik atau tempel teks, atur Masukan sebagai ke Hex untuk byte mentah, atau klik Buka file untuk menghitung checksum isinya.
- Biarkan Algoritma pada CRC-32 untuk ZIP, gzip, dan PNG, atau pilih CRC-32C untuk iSCSI, ext4, Btrfs, dan Google Cloud Storage.
- Pada Keluaran sebagai, pilih hex (huruf kecil), HEX (huruf besar), Desimal, atau Base64.
- Untuk memverifikasi, tempel checksum yang diharapkan ke kolom Bandingkan dengan, dalam hex tanpa 0x, desimal, atau Base64.
Pengertian checksum CRC32
Cyclic redundancy check (CRC) memperlakukan masukan sebagai satu polinomial biner yang panjang, membaginya dengan polinomial pembangkit yang tetap, lalu menyimpan sisa pembagiannya. Untuk CRC-32, sisa ini berukuran 32 bit dan biasanya ditulis sebagai 8 digit hex atau sebagai bilangan tak bertanda dari 0 hingga 4.294.967.295. Hampir setiap perubahan pada data akan mengubah sisa tersebut.
CRC dirancang untuk jenis error yang benar-benar terjadi pada kabel, radio, dan disk. CRC-32 mendeteksi setiap rentetan (burst) bit rusak hingga sepanjang 32 bit, dan kerusakan acak hanya lolos tanpa terdeteksi sekitar sekali dalam 4,3 miliar kasus. CRC-32 juga sangat cepat dihitung, itulah sebabnya ia tertanam di ZIP, gzip, PNG, dan frame Ethernet.
CRC-32 dan CRC-32C
| CRC-32 | CRC-32C (Castagnoli) | |
|---|---|---|
| Polinomial | 0x04C11DB7, versi terbalik 0xEDB88320 | 0x1EDC6F41, versi terbalik 0x82F63B78 |
Nilai cek untuk 123456789 | cbf43926 | e3069283 |
| Dipakai oleh | ZIP, gzip, PNG, Ethernet | iSCSI, SCTP, metadata ext4, Btrfs, Google Cloud Storage |
| Dukungan perangkat keras | Instruksi CRC32 ARMv8 | Instruksi x86 SSE4.2 crc32, ARMv8 |
Keduanya dimulai dari 0xFFFFFFFF, memproses bit setiap byte mulai dari bit yang paling tidak signifikan, dan membalik semua bit nilai akhirnya; hanya polinomialnya yang berbeda, sehingga data yang sama menghasilkan dua nilai yang sama sekali tidak berkaitan. Yang pertama adalah yang dimaksud sebagian besar alat dengan "CRC32" dan dikatalogkan sebagai CRC-32/ISO-HDLC. CRC-32C kemudian diadopsi oleh protokol penyimpanan dan jaringan karena kemampuan deteksi error-nya lebih kuat. Google Cloud Storage melaporkan CRC-32C, dan Amazon S3 salah satu dari kedua varian, sebagai Base64 dari empat byte dalam urutan big-endian, persis seperti yang ditampilkan keluaran Base64.
Checksum, bukan pemeriksaan keamanan
CRC melindungi dari kerusakan yang tidak disengaja, bukan dari serangan. CRC adalah fungsi linear, sehingga siapa pun dapat mengubah sebuah file lalu menyesuaikan empat byte agar CRC-32-nya tetap sama. Karena itu, CRC yang cocok sama sekali tidak membuktikan bahwa data tidak dimanipulasi dengan sengaja. Untuk memeriksa unduhan, bandingkan hash SHA-256 dari sumber tepercaya; untuk membuktikan siapa pengirim pesan, gunakan HMAC.
32 bit juga terlalu sedikit untuk mengidentifikasi data. Di antara sekitar 77.000 file acak, peluang ada dua file dengan CRC-32 yang sama sudah mencapai 50%, jadi jangan gunakan CRC-32 sebagai ID unik atau kunci deduplikasi. Jika tidak ada penyerang yang terlibat, MD5 atau SHA-256 jauh lebih baik sebagai sidik jari data.
CRC32 dalam kode
# Python: zlib.crc32 tidak bertanda (unsigned) di Python 3;
# "& 0xffffffff" hanya diperlukan untuk Python 2
import zlib
format(zlib.crc32(b'123456789'), '08x') # 'cbf43926'
// Node.js 20.15+ dan 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, dan java.util.zip.CRC32C sejak Java 9
// PHP
sprintf('%08x', crc32('123456789')); // 'cbf43926'
hash('crc32b', '123456789'); // 'cbf43926', CRC-32 yang sama
hash('crc32c', '123456789'); // 'e3069283'
hash('crc32', '123456789'); // '181989fc', CRC yang berbeda
Perhatikan penamaan di PHP: algoritma hash bernama crc32 bukanlah checksum ZIP, melainkan CRC yang dipakai oleh bzip2, yang ditampilkan dengan urutan byte terbalik. Gunakan crc32b atau fungsi crc32() agar hasilnya sesuai dengan ZIP, gzip, dan alat ini. Perintah Unix cksum memakai varian lain lagi yang juga ikut memperhitungkan panjang file, sehingga angkanya tidak akan cocok dengan keduanya.
Contoh
| Masukan (UTF-8) | CRC-32 |
|---|---|
Hello, World! | ec4ac3d0 |
Base64.is | 915d7207 |
你好 | 50a2b841 |
Pertanyaan yang sering diajukan
Berapa CRC32 dari "123456789"?
cbf43926 (3421780262 dalam desimal) dan CRC-32C-nya adalah e3069283. Jika implementasi Anda sendiri mengembalikan nilai-nilai ini, berarti implementasi tersebut memakai parameter yang sama dengan alat ini.Mengapa CRC32 saya berbeda dengan alat lain?
cksum POSIX semuanya memberikan hasil berbeda), byte masukan (akhir baris, baris baru di akhir, pengodean teks), format angka (beberapa bahasa pemrograman mengembalikan bilangan bulat 32 bit bertanda, sehingga nilai yang besar menjadi negatif), dan urutan byte.Mengapa byte CRC terbalik di dalam file ZIP atau gzip saya?
unzip -v, dan sebagian besar program lain menampilkan byte paling signifikan terlebih dahulu.Bisakah saya menghitung CRC32 dari file besar?
Bisa. Klik Buka file, lalu checksum akan dihitung dari byte file di perangkat Anda tanpa mengunggahnya; file apa pun yang dapat dimuat ke memori browser bisa diproses. Setelah itu, Anda dapat membandingkan hasilnya dengan nilai dalam file SFV atau daftar isi ZIP.
Apakah CRC32 termasuk fungsi hash?
CRC32 memetakan data dengan panjang berapa pun ke nilai 32 bit yang tetap, sehingga sering dicantumkan bersama hash, tetapi sebenarnya CRC32 adalah checksum: ia mendeteksi error yang tidak disengaja dan tidak memberi perlindungan terhadap orang yang sengaja mengubah data. Jika Anda memerlukan sidik jari yang lebih kuat, tabel Semua algoritma di bawah hasil menampilkan MD5 dan keluarga SHA untuk masukan yang sama.