Alat pembangun · Pengekod & penyahkod Base64
Sejarah ringkas Base64: daripada uuencode dan PEM kepada abjad hari ini
· Latar belakang
asas64 pengekodan
Abjad Base64 ialah rekod fosil masalah pengangkutan 1980-an. Siaran ini mengikuti keturunan daripada uuencode melalui Mel Dipertingkatkan Privasi kepada MIME dan RFC 4648, dan menerangkan setiap pilihan reka bentuk.
Mengapa abjad bukan sekadar 0–63 dalam beberapa susunan yang jelas — soalan yang membawa kembali empat dekad
Base64 tidak kelihatan terbentuk sepenuhnya sebagai standard. Abjad (A-Z, a-z, 0-9, +, /) ialah rekod fosil eksperimen pengekodan selama beberapa dekad, masing-masing cuba menyelesaikan masalah yang sama: bagaimana untuk mewakili data binari sebagai teks yang bertahan dalam e-mel 1970-an dan 1980-an, USENET, dan alat Unix. Cerita ini merangkumi uuencode pada Unix, Privasi-Enhanced Mail (RFC 1421) dalam 1993, MIME (RFC 2045) dalam 1996, dan akhirnya RFC 4648 dalam 2006 menggabungkan semua varian.
Memahami sejarah ini menerangkan sebab aksara tertentu berada dalam abjad dan sebab RFC meninggalkan pilihan tertentu kepada pelaksana. uuencode, singkatan dari Unix-to-Unix encode, ialah alat pertama untuk menyelesaikan masalah pengangkutan 7-bit pada Unix. Dicipta dalam 1980, ia mengekod setiap 3 bytes (24 bits) ke dalam 4 aksara daripada abjad aksara 64. Abjad uuencode ialah ASCII 32 (ruang) hingga ASCII 95 (garis bawah dan tanda baca lain), dipilih kerana aksara tersebut boleh dicetak pada mana-mana terminal. Repositori menunjukkan abjad yang sedang dilaksanakan, tetapi ia tidak mengandungi bukti arkib tentang siapa yang memilih pesanan itu atau sebab setiap aksara menang. Oleh itu, tajuk itu dikecilkan: reka letak sekarang boleh diperiksa dengan tepat, manakala motif dan tarikh memerlukan dokumen sejarah utama yang tidak disertakan di sini.
Mengapa abjad kelihatan bersejarah — sempadan yang tidak didokumenkan oleh repositori ini
Walau bagaimanapun, ruang sebagai watak pengekodan bermasalah: editor teks dan sistem mel memangkas ruang belakang, merosakkan output. Abjad tidak sesuai, tetapi ia berfungsi dengan cukup baik untuk pemindahan fail Unix-to-Unix. Mel Dipertingkatkan Privasi (RFC 1421, 1992) ialah percubaan awal untuk menyeragamkan e-mel yang disulitkan. Ia termasuk pengekodan Base64 sendiri (RFC 1341, untuk MIME, yang RFC 1421 didahulukan dalam spesifikasi tetapi ketinggalan dalam penerimaan).
RFC 1421 Base64 menggunakan abjad A-Z, a-z, 0-9, +, / (abjad base64 moden) dan baris dibalut pada 64 aksara. Abjad ini mengelakkan ruang dan aksara bermasalah lain; setiap aksara boleh dicetak dengan jelas dan tidak dikelirukan dengan kod kawalan atau variasi set aksara kebangsaan. Panjang garisan aksara 64 sepadan dengan lebar terminal kertas tahun 1980-an dan merupakan kompromi praktikal untuk kebolehbacaan. Uuencode tergolong dalam sejarah sekeliling, namun alat itu tidak membaca mahupun menulis abjadnya. Menganggapnya sebagai Base64 yang boleh ditukar ganti akan menjadi ralat format. Perbandingan berguna di sini adalah terhad kepada masalah yang dikongsi untuk mewakili bait dengan aksara boleh cetak.
Pengekodan terdahulu sebagai konteks, bukan bukti pelaksanaan
RFC 1421 tidak diterima pakai secara meluas untuk e-mel yang disulitkan, tetapi abjad Base64nya terselamat. MIME (Sambungan Mel Internet Serbaguna, RFC 2045, 1996) menerima pakai RFC 1421 Abjad Base64 tetapi menukar balut baris daripada 64 kepada 76 watak. Sebabnya bukan teknikal tetapi sejarah: PEM (Mel Dipertingkat Privasi) ialah 64 watak, dan MIME memilih had yang sedikit berbeza untuk mengelakkan kekeliruan PEM dalam penghuraian automatik.
MIME Base64 menjadi standard untuk lampiran e-mel dan merupakan varian Base64 yang paling banyak digunakan hari ini. RFC 2045 juga mentakrifkan nilai Pengekodan-Pindah-Kandungan yang lain (7bit, 8bit, boleh dicetak disebut), memberikan pilihan sistem mel berdasarkan jenis kandungan. Pilihan abjad mengelakkan aksara yang berbeza antara ASCII dan EBCDIC (pengekodan aksara kerangka utama IBM). Aksara A-Z, a-z, 0-9, + dan / adalah sama dalam kedua-dua pengekodan. Blok gaya PEM boleh dikenali kerana label mengelilingi bahan berkod yang dibalut. ToolAcre boleh memproses badan Base64 yang diekstrak selepas label tersebut dialih keluar. Ia tidak dapat menentukan spesifikasi arkib yang pertama kali menggunakan konvensyen tertentu, dan artikel ini tidak berpura-pura pokok sumber menjawab soalan itu.
Perisai gaya PEM sebagai format moden yang boleh diperhatikan, tanpa menuntut cerita asal
Aksara seperti kurungan terbuka dan kurungan dekat berbeza antara ASCII dan EBCDIC, jadi ia dikecualikan. Ini penting pada tahun 1980-an dan awal 1990-an apabila pemindahan data kerangka utama ke Unix adalah perkara biasa. Abjad juga mengelakkan garis miring ke belakang, petikan tunggal dan petikan berganda, yang mempunyai makna istimewa dalam rentetan C dan sintaks shell. Rentetan Base64 boleh dibenamkan dalam program C atau skrip shell tanpa melepaskan hampir setiap aksara.
RFC 3548 (2006) menggabungkan pengekodan Base64, base32 dan base16. Ia menyatakan bahawa MIME, PEM dan aplikasi lain semuanya menggunakan konsep yang serupa tetapi dengan peraturan dan abjad pelapik yang berbeza. RFC 4648 (2006, diterbitkan bersama RFC 3548) ialah standard semasa dan ia mentakrifkan lima keluarga pengekodan dengan vektor ujian untuk setiap satu. RFC juga mencatat sejarah: dokumen yang menentukan pengekodan, perkara yang berubah antara versi dan sebab pilihan dibuat. Pilihan pembalut aksara 76 pengekod dan penyingkiran ruang kosong penyahkod menjadikan sampel berbentuk MIME boleh diuji. Fakta pelaksanaan tersebut tidak membuktikan sejarah lengkap standard mel. Mereka menunjukkan tingkah laku keserasian moden yang boleh dihasilkan semula oleh pembaca secara langsung dalam panel dan ujian.
Balutan gaya MIME sebagai pilihan pengekod, tanpa membina semula sejarah piawai
Kebanyakan pembangun sahaja menemui base64 dan base64url dalam RFC 4648; sejarah didokumenkan untuk mereka yang perlu melaksanakan varian yang lebih lama. Base64url (RFC 4648 bahagian 5) menggantikan tambah dengan sempang dan sengkang dengan garis bawah untuk mengelakkan aksara URL-terpelihara. Rentetan base64 yang mengandungi + dan / mesti dikodkan peratus dalam URL (%2B dan %2F); base64url mengelakkannya.
JWT (JSON Token Web) menggunakan base64url tanpa pelapik. Sesetengah aplikasi menggunakan base64url dengan padding. RFC mentakrifkan kedua-dua varian; terpulang kepada aplikasi yang hendak dipilih. Varians inilah sebabnya penyahkod JWT dan penyahkod Base64 e-mel boleh menghasilkan output yang berbeza untuk rentetan input yang sama (seseorang menjangkakan base64url, yang lain menjangkakan base64). Abjad, peraturan padding, dan pembalut baris semuanya muncul daripada kekangan praktikal sistem sebenar. Kemudahalihan paling baik dianggap sebagai kekangan pada abjad pengangkutan dan bukannya biografi yang disahkan bagi setiap simbol. Huruf dan digit kekal secara visual biasa di seluruh sistem teks biasa, manakala tanda baca akhir berbeza dalam mod selamat URL. Rasional pemilihan sejarah yang tepat ditinggalkan tanpa bukti utama.
Mudah alih sebagai kekangan reka bentuk, bukan akaun yang disahkan bagi pilihan watak individu
Set aksara 64 telah dipilih untuk kebolehwakilan merentas pengekodan; abjad telah ditetapkan oleh RFC 1341 dan 1421 dan MIME; peraturan pelapik datang daripada penjajaran 3-bait; dan pembalut baris datang daripada had pengangkutan e-mel. Pelaksanaan yang mengabaikan sejarah ini mungkin mencipta pengekodan baharu atau melupakan kes tepi. Vektor ujian RFC 4648 (foobar menghasilkan Zm9vYmFy) ialah cara untuk mengesahkan bahawa pelaksanaan mematuhi piawaian.
Alternatif moden seperti base85 (digunakan dalam beberapa konteks) wujud, tetapi base64 kekal dominan kerana momentum sejarah dan kerana ia cukup baik. Base64 bukanlah pengekodan yang paling padat (base85 dan base91 lebih padat), tetapi ia mudah, universal dan terbukti. Apa yang boleh dinyatakan dengan tegas ialah pasangan abjad semasa: standard berakhir dengan tambah dan slash; URL-pengganti selamat tanda sempang dan garis bawah. Pelapik dan pembalut adalah pilihan yang berasingan. Ujian meliputi kedua-dua mod dan pelapik yang hilang, memberikan bukti yang boleh dihasilkan semula untuk tingkah laku semasa dan bukannya kronologi yang disimpulkan.
Perkara yang dibuktikan oleh repositori tentang standard semasa dan abjad selamat URL
Overhed saiz 33 peratus boleh diterima untuk kebanyakan kegunaan. Abjad adalah stabil merentas pelaksanaan. RFC cukup jelas bahawa penyelewengan biasanya disengajakan (seperti peninggalan padding atau pengendalian ruang kosong) dan bukannya salah faham yang tidak disengajakan.
Memahami sejarah Base64 menerangkan sebab ia kelihatan seperti itu. Aksara tambah dan slash adalah pilihan yang disengajakan untuk mengelakkan kekaburan dalam pengekodan aksara yang berbeza. Peraturan pelapik datang daripada kumpulan 3-bait. Base85 dan Ascii85 menggunakan saiz kumpulan dan abjad yang berbeza dan berada di luar pelaksanaan. Menyebut mereka tidak menjadikan halaman ini sebagai penukar untuk mereka. Membandingkan ketumpatan atau sejarahnya memerlukan sumber dan vektor ujian di luar fail Base64 yang disemak untuk modul ini.
Bawa pulang: setiap aksara dipilih atas sebab tertentu — cara pengekod & penyahkod Base64 melaksanakan abjad standard yang terhasil
Pembalut baris datang daripada e-mel. Setiap keputusan dibuat untuk menyelesaikan masalah sebenar dengan sistem sebenar. Hari ini, Base64 kebanyakannya digunakan dalam konteks (JWT, API, URI data) yang sejarahnya tidak penting, tetapi peraturan abjad dan padding diwarisi daripada MIME dan PEM melalui RFC 4648.
Membaca RFC sekali dan mengekod rentetan ujian dalam alat pengekod & penyahkod Base64 menghubungkan piawaian sekarang kepada akar sejarahnya. Abjad standard yang terhasil kelihatan apabila input mencapai indeks enam puluh dua atau enam puluh tiga. Gunakan sampel yang menghasilkan kedudukan tersebut, togol URL-mod selamat dan bandingkan sahaja tanda baca yang diubah. Percubaan itu menunjukkan format hari ini tanpa bergantung pada cerita yang tidak disokong tentang ciptaannya.