Kalkulator CRC

Hitung CRC-8/CCITT, CRC-16/CCITT-FALSE, CRC-16/MODBUS, CRC-32/ISO-HDLC (versi zlib/PNG/gzip), 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, atau Adler-32 atas teks, byte heksadesimal, atau seluruh file — beberapa set parameter sekaligus, dengan parameter persis (poly, init, refin, refout, xorout) dicetak di samping setiap nilai sehingga ketidakcocokan tidak pernah menjadi misteri. Untuk digest kriptografis (MD5/SHA-2/SHA-3/BLAKE2) lihat Generator Hash.
Berjalan sepenuhnya secara lokal — tidak ada yang diunggah. File hingga 200 MB.
Input: Output:
Algoritma:
Baris menggunakan bentuk "ALGORITMA  nilai" yang diikuti baris parameter yang menjorok, sehingga hasil yang disalin-tempel selalu menyebutkan set parameter yang menghasilkannya.
CRC mana yang Anda butuhkan?
Jika sebuah spesifikasi hanya menyebut "CRC-32", itu hampir selalu berarti CRC-32/ISO-HDLC — yang ada di dalam zlib, gzip, PNG, ZIP, dan Ethernet. CRC-32C (Castagnoli) adalah yang dipercepat perangkat keras di CPU modern, dipakai oleh iSCSI, ext4, btrfs, dan ZFS. cksum cocok dengan perintah POSIX cksum (menambahkan panjang file sebelum membagi). CRC-16/MODBUS adalah checksum bingkai RTU perangkat Modbus; CRC-16/CCITT-FALSE umum di kartu pintar. CRC-64/XZ muncul dalam arsip .xz; klaster Redis memakai CRC-64/REDIS untuk slot hash. Adler-32 adalah alternatif cepat zlib untuk CRC-32. Jika dua alat tidak sepakat, bandingkan baris poly/init/xorout mereka — set parameter, bukan nama, yang menentukan hasilnya.
Uji mandiri
Menjalankan mesin halaman terhadap nilai pemeriksaan yang dipublikasikan ("123456789") untuk semua 14 set parameter, ditambah pemeriksaan penguraian hex dan rendering desimal/oktal. Tidak ada yang dikirim ke mana pun.
CRC — cyclic redundancy check, dijelaskan dari dasar
Dalam satu kalimat: CRC memperlakukan data Anda sebagai satu bilangan biner raksasa, membaginya dengan bilangan “generator” yang tetap menggunakan XOR alih-alih pengurangan, dan melaporkan sisanya — sidik jari ringkas yang berubah drastis ketika satu bit input saja terbalik, itulah sebabnya segala hal dari file PNG hingga kabel Modbus membawanya.
Apa sebenarnya CRC itu

Gambaran pembagian. Susun byte Anda sebagai satu bilangan biner panjang. Pilih pembagi — polinomial, mis. 0x04C11DB7 untuk CRC-32. Lakukan pembagian panjang biner, di mana "pengurangan" adalah operasi XOR: setiap kali bit terdepan dari sisa berjalan adalah 1, XOR dengan pembagi, geser ke kiri, ulangi. Setelah seluruh pesan dilalui, apa pun yang tertinggal di register adalah CRC. Tidak ada kunci, tidak ada tabel dalam definisinya — hanya pembagian dengan sisa.

Lima parameter. Dua sistem dapat sama-sama mengatakan "CRC-32" dan tetap berbeda, karena nama saja tidak menetapkan apa pun. Resep lengkap memerlukan lima nilai: poly (pembagi), init (keadaan awal register — semua nol membuat byte nol di depan lenyap, semua satu tidak), refin/refout (apakah setiap byte input — dan register akhir — dibalik bitnya, warisan perangkat keras serial yang mengirim bit paling tidak signifikan lebih dulu), dan xorout (topeng XOR akhir sehingga deretan nol di akhir tetap mengubah jawaban). Halaman ini mencetak kelimanya di samping setiap hasil persis untuk alasan itu.

Mengapa ia mendeteksi kesalahan. Pembagi yang dipilih dengan baik membuat sisa sebuah pesan dan sisa pesan yang sama dengan beberapa bit terbalik berbeda dengan probabilitas yang sangat tinggi: CRC-32 yang baik menangkap semua kesalahan 1-bit dan 2-bit, semua jumlah ganjil kesalahan bit, dan setiap burst hingga 32 bit berturut-turut yang rusak — dijamin, bukan secara probabilistik. Jaminan itu berkaitan dengan kerusakan tidak disengaja, dan itulah yang menjadikan CRC alat yang tepat untuk kabel berderau dan disk yang tidak stabil.

Apa yang bukan CRC

Bukan hash kriptografis. Tidak ada rahasia dan tidak ada sifat satu arah: siapa pun yang mengetahui parameternya dapat memalsukan pesan dengan CRC apa pun yang disukainya, dalam milidetik, dengan menambahkan empat byte koreksi. CRC mendeteksi kecelakaan, tidak pernah musuh. Untuk unduhan yang diverifikasi terhadap pihak asing, tanda tangan itu penting — lihat Generator Hash (MD5/SHA/BLAKE2) sebagai gantinya. Halaman itu juga menjelaskan mengapa MD5 dan SHA-1 dipensiunkan untuk pengaturan yang bermusuhan sementara SHA-256 tetap bertahan.

Bukan kode koreksi kesalahan. CRC memberi tahu Anda bahwa sesuatu berubah, bukan apa yang berubah. Memperbaiki kesalahan secara langsung adalah tugas kode seperti Reed–Solomon atau Hamming, yang dengan sengaja menyimpan struktur berlebih yang dapat dibalik oleh decoder.

Bukan kompresi atau enkripsi. Sisanya hanya beberapa byte terlepas dari ukuran input, dan dari situ input tidak dapat dipulihkan — tetapi tidak seperti hash kriptografis, itu hanya karena informasi telah dibuang, bukan karena pembalikannya sulit.

Keluarga-keluarga di halaman ini

Tiga serangkai CRC-32. Empat entri di halaman ini berbagi poli 0x04C11DB7 dan tetap menghasilkan nilai yang berbeda: ISO-HDLC (tercermin, init/xorout semua satu) adalah CRC-32 "yang" dari zlib, gzip, PNG, dan ZIP; BZIP2 adalah matematika yang sama tanpa cermin; MPEG-2 adalah BZIP2 tanpa XOR akhir; POSIX dimulai dari nol dan menjadi dasar perintah cksum (yang selain itu menambahkan panjang file ke pembagian, sehingga cksum sebuah file dan CRC-32/POSIX dari byte yang sama berbeda). CRC-32C (Castagnoli, poli 0x1EDC6F41) adalah saudara kelima: poli berbeda yang dipilih untuk kinerja deteksi kesalahan yang lebih baik, dan yang dapat dihitung CPU x86 dan ARM modern pada kecepatan memori dengan satu instruksi.

Empat serangkai CRC-64. XZ menggunakan polinomial ECMA-182 dalam bentuk tercermin dengan init semua satu dan xorout; ECMA-182 sendiri adalah asli tak-tercermin dengan init nol dari standar pita DLT-1; GO-ISO adalah crc64.ISO milik Go, dengan poli kecil 0x1B, tetap tercermin; REDIS memakai poli yang dipilih untuk avalanche yang baik dalam penetapan slot hash. Enam puluh empat bit adalah ukuran di mana CRC mulai dipakai sebagai fungsi hash (bucketing) alih-alih checksum murni.

Adler-32 adalah orang luar: ia sama sekali bukan pembagian. Ia menjumlahkan byte (A, dimulai dari 1) dan menjumlahkan jumlah-jumlah itu (B), keduanya modulo 65521, lalu menggabungkan kedua jumlah 16-bit tersebut. Ia lebih cepat daripada CRC-32 di perangkat lunak dan zlib memakainya untuk aliran deflate — namun untuk input pendek (di bawah beberapa ratus byte) jumlahnya membawa terlalu sedikit informasi, itulah sebabnya zlib kembali ke CRC-32 untuk blok kecil.

CRC-8 dan CRC-16 bertahan di tempat byte mahal: CRC-8/CCITT (poli 0x07) melindungi byte header tunggal dalam protokol SMBus dan radio seluler; CRC-16/CCITT-FALSE menjaga blok kartu pintar; CRC-16/MODBUS adalah checksum setiap bingkai Modbus RTU di lantai pabrik di seluruh dunia.

Tempat setiap algoritma digunakan
Set parameterDitemukan di
CRC-32/ISO-HDLCzlib, gzip, PNG, ZIP, Ethernet (FCS), banyak format arsip
CRC-32CiSCSI, ext4, btrfs, ZFS, instruksi perangkat keras CRC32C SSE4.2/ARMv8
CRC-32/BZIP2Aliran arsip .bz2
CRC-32/MPEG-2Aliran transport MPEG-2
CRC-32/POSIX & cksumKeluaran perintah POSIX cksum (cksum file.txt)
CRC-16/MODBUSBingkai Modbus RTU (PLC industri, meter, inverter)
CRC-16/CCITT-FALSEkartu pintar, tautan dekat X.25, beberapa protokol GPS
CRC-8/CCITTSMBus (byte PEC), header radio seluler
CRC-64/XZPemeriksaan integritas kontainer .xz
CRC-64/ECMA-182ECMA-182 / standar pita DLT-1
CRC-64/GO-ISOPustaka standar Go crc64.ISO
CRC-64/REDISPenetapan slot hash klaster Redis
Adler-32Aliran zlib (deflate), konteks checksum cepat lainnya
Tabel jangkar — check(“123456789”)

Konvensi katalog CRC adalah mempublikasikan hasil untuk string ASCII 123456789 (9 byte). Setiap nilai di bawah dapat direproduksi di halaman ini: ketik 123456789 di kotak Teks, centang algoritmanya, lalu klik Hitung.

Set parameterLebarNilai pemeriksaan (hex)
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

Sumber: setiap nilai diperiksa silang dengan implementasi referensi bitwise yang independen dan, bila ada, dengan pustaka sistem yang memuat algoritmanya (zlib untuk CRC-32 dan Adler-32; katalog CRC Greg Cook untuk sisanya).

Kesalahan umum
  • “CRC-32” tanpa parameter. Di antara ISO-HDLC, BZIP2, MPEG-2, POSIX, dan CRC-32C, lima nilai berbeda beredar di bawah nama yang sama. Selalu catat poly/init/refin/refout/xorout bersama hasilnya — halaman ini mencetaknya untuk Anda.
  • Membandingkan CRC-32 sebuah file dengan keluaran cksum-nya. Algoritmanya berbeda: cksum menambahkan panjang dan menggunakan init yang berbeda. Angkanya tidak akan cocok, dan keduanya "benar".
  • Mempercayai CRC terhadap manipulasi. Memalsukan CRC yang cocok adalah latihan buku teks (menambal 4 byte terakhir). Gunakan MAC berkunci (HMAC) atau tanda tangan ketika pihak lain mungkin bermusuhan.
  • Mengharapkan efek avalanche. CRC bersifat linear: pesan yang berkaitan menghasilkan CRC yang berkaitan. Cocok untuk derau, salah untuk hashing — jika Anda memerlukan bucketing, CRC-64 atau hash sungguhan lebih aman daripada CRC-32.
  • Teks hex vs byte. String "123456789" (9 byte ASCII, 31 32 33 34 35 36 37 38 39) dan angka 0x123456789 adalah input yang berbeda dengan CRC yang berbeda. Gunakan tab Byte Hex ketika data sumber benar-benar biner.
FAQ

Mengapa CRC-32 Anda tidak cocok dengan yang ada di file ZIP? CRC-32 ZIP adalah ISO-HDLC atas data yang tidak dikompresi. Pastikan Anda meng-hash byte yang sama (bukan aliran terkompresi), mode yang sama (Teks vs Hex), dan set parameter yang sama — baris parameter yang dicetak di bawah setiap hasil ada untuk membuat pemeriksaan itu instan.

Mana yang lebih baik, CRC-32C atau CRC-32? Untuk deteksi kesalahan yang tidak disengaja keduanya menangkap semua burst hingga 32 bit; CRC-32C berkinerja lebih baik pada beberapa pola kesalahan dan merupakan yang memiliki instruksi CPU — praktis gratis pada kecepatan gigabit. Alasan CRC-32/ISO-HDLC bertahan adalah kompatibilitas: tiga puluh tahun arsip menggunakannya.

Apakah CRC-64 lebih kuat daripada CRC-32? Ia mendeteksi burst yang lebih panjang (hingga 64 bit) dan bertabrakan jauh lebih sedikit ketika dipakai untuk bucketing, tetapi sama mudahnya dipalsukan — lebar memberi jaminan deteksi, bukan keamanan.

Dapatkah CRC dibalik untuk mengungkap input? Tidak — tak terhingga banyaknya input berbagi CRC yang sama. Tetapi tidak seperti hash kriptografis, penyerang dapat membangun input dengan CRC apa pun yang diinginkan, dan itulah arti mengapa ia sama sekali tidak searah.