Alat pembangun · Pengekod & penyahkod Base64
Bagaimana Base64 menukarkan tiga bait kepada empat aksara, langkah demi langkah
· Bagaimana ia berfungsi
asas64 pengekodan unicode
Base64 tidak lebih daripada mengumpul semula bit: 24 bits masuk, empat 6-bit indeks keluar. Siaran ini menelusuri carian jadual, peralihan sedikit dan perjalanan terbalik supaya format berhenti menjadi kotak hitam.
Rentetan 'TWFu' dan perkataan yang disembunyikannya — bermula dari blok empat aksara sebenar dan bertanya dari mana asal setiap huruf
Rentetan Base64 empat aksara TWFu menyahkod kepada urutan tiga bait Man. Cara tiga bait menjadi empat aksara mendedahkan bahawa Base64 bukanlah penyulitan atau pemampatan tetapi pengumpulan semula bit tulen. Sebaik sahaja anda melihat reka letak bit, output Base64 berhenti menjadi legap dan menjadi boleh diramal. Anda boleh mengekod Man dengan tangan, mengesahkannya terhadap TWFu, dan memahami mengapa Base64 sentiasa mengeluarkan empat aksara setiap tiga bait input.
Keajaiban Base64 ialah tiga bait (24 bits) berkumpul semula dengan sempurna kepada empat ketulan enam bit. Enam bit mewakili 0 kepada 63, itulah sebabnya abjad mengandungi tepat 64 simbol: A–Z (26), a–z (26), 0–9 (10), dan + dan / (2). Setiap ketulan enam bit mengindeks ke dalam abjad untuk menghasilkan satu aksara keluaran. Sebaliknya adalah sama bersih: empat aksara indeks ke dalam abjad untuk memulihkan empat ketulan enam bit, yang dikumpulkan semula menjadi tiga bait.
Daripada bait kepada indeks 6-bit — bagaimana 24 bits dibahagikan kepada empat kumpulan dan mengapa simbol 64 cukup tepat
Inilah sebabnya mengapa Base64 berasa semula jadi di mana-mana. Ambil tiga bait M, a, n dalam ASCII: 0x4D, 0x61, 0x6E. Tulis dalam binari: 01001101, 01100001, 01101110. Satukan semua 24 bits: 010011010110000101101110. Kumpulkan semula kepada empat ketulan enam bit: 010011 010110 000101 101110. Tafsiran sebagai nombor binari: 19, 22, 5, 46. Indeks ke dalam abjad Base64 (A=0, B=1, ...Z=25, a=26, ...z=51, 0=52, ...9=61, +=62, /=63). Indeks 19 ialah T, indeks 22 ialah W, indeks 5 ialah F, indeks 46 adakah awak.
Keluaran: TWFu. Carian indeks adalah mekanikal. Abjad Base64 ialah urutan di mana kedudukan penting: setiap pelaksanaan menggunakan susunan yang sama A–Z, a–z, 0–9, +, /. Pesanan yang berbeza menghasilkan output yang berbeza; mengubah susunan adalah cara base64url berfungsi. Dalam abjad standard, huruf besar menduduki indeks 0–25, huruf kecil 26–51, digit 52–61, watak istimewa 62–63. Pesanan ini adalah sewenang-wenangnya tetapi ditetapkan oleh RFC; setiap penyahkod mengharapkan pemetaan yang sama.
Jadual abjad dan carian indeks — A–Z, a–z, 0–9, + dan / mengikut tertib, dan mengapa susunan itu penting untuk perbandingan
Jika anda menulis abjad di atas kertas dan mengira dengan teliti, anda boleh mengekod secara manual tanpa komputer: cari 19, kira A B C...T, tulis T, ulang. Membalikkan adalah sama mudah. Diberi TWFu, cari setiap aksara dalam abjad: T ialah 19, W ialah 22, F ialah 5, u ialah 46. Tukar kepada perduaan (sifar pendahuluan untuk enam bit): 010011, 010110, 000101, 101110. Gabungkan: 010011010110000101101110.
Himpunkan kepada tiga bait lapan bit: 01001101, 01100001, 01101110. Tafsirkan sebagai perpuluhan atau heks: 77, 97, 110 atau 0x4D, 0x61, 0x6E. Tukar kepada ASCII: M, a, n. Anda mendapatkan semula tiga bait asal. Inilah sebabnya Base64 boleh diterbalikkan dan mengapa padding menjadi perlu sahaja untuk input yang tidak boleh dibahagikan dengan tiga. Base64 mengekod bait tepat dan tidak lebih. Pengekodan Man dan pengekodan bait (77, 97, 110) adalah operasi yang sama; Base64 tidak tahu atau mengambil berat tentang aksara, bahasa atau pengekodan.
Contoh yang berfungsi: pengekodan 'Man' dengan tangan — binari M, a dan n, empat indeks dan empat aksara keluaran
Ia melihat bait. Pengekod dan penyahkod alat ini membimbangkan berasingan: input teks seperti Man melalui TextEncoder terlebih dahulu, bertukar menjadi UTF-8 bait. Bait tersebut ialah input Base64. Output TWFu ialah teks (ASCII aksara), tetapi bermaksud bait, bukan perkataan. Pembacaan alat yang berbeza TWFu memulihkan bait (77, 97, 110) dan mesti memutuskan secara bebas sama ada ia mewakili perkataan, imej, mesej dalam pengekodan lain atau sesuatu yang lain.
Input besar adalah banyak pengulangan corak ini. Fail 300-bait menggunakan 300/3 = 100 blok tiga bait, setiap satu menjadi empat aksara, menghasilkan 400 aksara output. Apabila blok terakhir berlapik, penyahkod membuang isian sifar dan bukannya menghasilkan bait lain. Sempadan itu boleh dilihat dengan input dua bait: tiga indeks berguna bertahan, kedudukan keempat ialah tanda sama, dan sahaja enam belas bit yang dibina semula kepunyaan hasilnya.
Membalikkan proses — carian indeks, pembungkusan bit dan ke mana bit padding pergi apabila menyahkod empat aksara kepada tiga bait
Kerana corak adalah tetap, operasi adalah pantas: anjakan bit, cari ke atas, tulis. Satu-satunya ketidakteraturan ialah blok akhir apabila panjang input bukan gandaan tiga, dikendalikan oleh pelapik. Oleh kerana setiap blok adalah bebas—bit satu blok tidak menjejaskan seterusnya—Base64 boleh mengekod secara berperingkat: suapan bait masuk, keluarkan aksara, tanpa menunggu keseluruhan input.
Base64url sahaja berbeza dalam penggantian abjad. Indeks 62 dan 63 menjadi - dan _ bukannya + dan /. Pengumpulan semula bit adalah sama; pemetaan bait kepada aksara adalah sama; sahaja jadual carian sahaja yang berubah. Oleh itu, penyahkod tangan boleh menggunakan semula setiap anjakan dan topeng daripada Base64 standard, menggantikan sahaja dua simbol terminal tersebut.
Mengapa hasilnya ialah urutan bait, bukan teks — langkah berasingan yang menukar bait menjadi UTF-8 aksara
Inilah sebabnya RFC 4648 bahagian 5 menerangkannya sebagai abjad yang berbeza, bukan pengekodan yang berbeza. Rentetan TWFu dalam Base64 standard tidak jelas: ia sahaja boleh bermaksud indeks (19, 22, 5, 46). Dalam base64url, rentetan perlu mengandungi - atau _ untuk berbeza, dan tanpa yang ada, indeks yang sama digunakan.
Ralat dalam pelaksanaan biasanya melibatkan kesilapan luar demi satu dalam anjakan bit atau pemetaan abjad yang salah. Pengekod yang menggunakan susunan abjad yang salah menghasilkan output yang berbeza jika a dan A ditukar. Penyahkod salah mengendalikan blok separa terakhir (apabila padding hadir) mungkin memulihkan bilangan bait yang salah. Pengekod & penyahkod Base64 menggunakan abjad standard dan mengendalikan pelapik oleh RFC 4648, jadi anda boleh menampal sebarang contoh yang dikira dengan tangan dan menyemak kerja.
Perkara ini tidak meliputi — base64url, MIME pembalut baris dan prestasi penimbal besar
Oleh kerana matematik bit bersifat deterministik, sebarang ralat dalam pengekodan manual akan menghasilkan output yang berbeza apabila dinyahkod, membuat kesilapan serta-merta. Base32 (RFC 4648 bahagian 6) memanjangkan prinsip kepada ketulan lima bit: 32 simbol (A–Z dan 2–7), jadi lima bit sesuai dengan tepat ke dalam satu aksara, dan 40 bits (lima bait) berkumpul semula menjadi lapan aksara. Logik pengumpulan semula yang sama digunakan; perbezaan adalah saiz abjad dan akibatnya nisbah bait input kepada aksara output.
Heksadesimal (asas16) menggunakan lapan daripada 256 kombinasi simbol yang mungkin dan memetakan satu bait kepada dua aksara tanpa pengumpulan semula. Memahami Base64 sebagai pengumpulan semula bit menjadikan varian secara konsep mudah: pilih bit setiap aksara, input kumpulan dengan sewajarnya, cari setiap kumpulan dalam abjad. Apabila menyahpepijat Base64, gambar bit ialah alat anda. Jika bait telah rosak, kodkannya semula dan bandingkan aksara keluaran mengikut aksara. Jika tidak pasti bait yang terkandung dalam TWFu, nyahkodkannya dan periksa output dalam heks.
Bawa pulang: Base64 ialah pengumpulan semula bit yang boleh diterbalikkan — bagaimana pengekod & penyahkod Base64 membolehkan anda menyemak mana-mana blok yang dikira tangan serta-merta dalam pelayar
Pengekod & penyahkod Base64 menunjukkan kedua-dua aksara dan paparan hex, menjadikannya mudah untuk mengesahkan sama ada melihat bait teks (akan menyahkod kepada teks yang boleh dibaca) atau data perduaan (ditunjukkan sebagai hex dan disimpan dengan baik sebagai bait, bukan teks). Proses langkah demi langkah—bait kepada bit, bit kepada indeks, indeks kepada aksara—adalah deterministik, pantas, sama dalam setiap pelaksanaan yang mematuhi. RFC 4648 mentakrifkan Base64 secara formal supaya pelaksanaan boleh dibandingkan.
Standard menentukan abjad, reka letak bit, peraturan pelapik dan cara pembalut baris dikendalikan dalam MIME. Mengetahui standard memudahkan untuk mengesahkan sama ada penyahkod mengikutnya dengan ketat (Base64 berkanun) atau menerima varian (lapik tiada atau aksara selamat URL). Banyak aplikasi dunia sebenar menggunakan Base64 sedikit berbeza: ada yang mengetepikan padding, ada yang menggunakan aksara URL-selamat, ada yang membalut pada panjang baris yang berbeza. Pengekod & penyahkod Base64 mengendalikan variasi secara automatik, tetapi pemahaman standard menjadikan isu penyepaduan penyahpepijatan lebih mudah.