Alat pengembang · Encoder & decoder Base64
Mengapa lampiran email adalah Base64: MIME, 7-bit transport dan 76-baris kolom
· Latar belakang
base64 pengkodean
Email dibuat untuk teks 7-bit ASCII, dan lampiran harus pas di dalamnya. Posting ini menelusuri bagaimana MIME mengadopsi Base64, mengapa baris dibungkus dengan 76 karakter dan apa artinya bagi ukuran dan proses debug.
Lampiran yang tiba rusak melalui relai lama — masalah 8-bit yang ingin dipecahkan oleh MIME
Email dirancang pada tahun 1970an dan 1980an hanya untuk teks 7-bit ASCII. SMTP, protokol yang membawa email, mengharapkan setiap baris paling banyak 998 karakter dari 7-bit ASCII (karakter 0-127). Mengirim file biner seperti PDF atau gambar langsung melalui SMTP akan gagal: byte 128-255 akan rusak atau ditolak oleh server email dan relay lama. Lampiran memerlukan pengkodean. MIME (Ekstensi Email Internet Serbaguna, RFC 2045) menyelesaikan masalah ini dengan mendefinisikan nilai header Content-Transfer-Encoding, termasuk base64, yang mewakili urutan byte apa pun sebagai teks 7-bit ASCII.
MIME menawarkan beberapa pilihan Pengkodean-Transfer-Konten: 7bit (tanpa pengkodean, hanya untuk ASCII yang aman), 8bit (untuk server yang mendukung 8-bit byte, tidak universal), dapat dicetak dengan kutipan (hanya mengkodekan byte yang tidak aman, menjaga ASCII tetap dapat dibaca), dan base64 (mengkodekan semuanya, memaksimalkan kompatibilitas). Base64 dipilih untuk lampiran biner karena sederhana, terstandarisasi, dan menjamin keamanan pada sistem email apa pun, tidak peduli berapa lama atau hanya 7-bit saja. Imbalannya adalah ukuran: Base64 sekitar sepertiga lebih besar dari byte aslinya.
Masalah transportasi yang dipecahkan Base64 — mewakili byte sembarang dengan karakter yang dapat dicetak
3 KB PDF kira-kira menjadi 4 KB dari teks Base64. Batas baris 76 karakter berasal dari RFC 2045.
SMTP mengizinkan baris hingga 998 karakter, namun sistem email lama dan beberapa filter spam menolak antrean panjang. RFC 2045 menetapkan bahwa MIME baris Base64 tidak boleh melebihi 76 karakter (ditambah akhiran baris CRLF), sehingga server email tidak akan pernah merusak transportasi. Batasannya bukanlah sesuatu yang ajaib; ini adalah kompromi historis antara keterbacaan (76 karakter cocok untuk sebagian besar terminal tahun 1980-an), kompatibilitas dengan sistem lama, dan menghindari deteksi sebagai pola spam atau virus.
Pilihan keluaran terlihat di alat ini — bantalan kanonik dan pembungkus karakter 76 opsional
Sistem email modern biasanya mendukung saluran yang lebih panjang, namun pengkodean ke baris karakter 76 memastikan lampiran mencapai penerima tertua sekalipun. Setelah RFC 2045 mendefinisikan MIME Base64, RFC 4288 (jenis media) dan RFC 2183 (Disposisi Konten) menambahkan cara standar untuk memberi label pada lampiran. Pesan dengan lampiran PDF mencakup header Content-Transfer-Encoding: base64, header Content-Type: application/pdf, dan byte PDF yang dikodekan sebagai Base64 dengan baris karakter 76. Pembaca email mendekode baris dengan menghapus jeda baris (CRLF karakter) dan kemudian mendekode Base64 untuk memulihkan byte asli.
Mendekode lampiran MIME Base64 memerlukan pengabaian spasi. RFC mengatakan: decoder harus melewati jeda baris (karakter CR dan LF) selama decoding. Inilah sebabnya mengapa dekoder Base64 yang menerima spasi menjadi praktis; sebagian besar email MIME yang asli akan memiliki jeda baris. Beberapa dekoder bersifat ketat dan menolak spasi kosong (cocok untuk konteks seperti JWT, yang tidak boleh ada jeda baris), sementara dekoder lainnya bersikap lunak dan mengabaikan spasi (cocok untuk MIME).
Opsi 76-karakter dalam praktiknya — bagaimana encoder menyisipkan dan decoder mengabaikan jeda baris
Alat encoder & decoder Base64 dapat menangani keduanya: alat ini menerima lampiran multi-baris yang ditempelkan dan mengabaikan jeda baris selama dekode. Dampak ukurannya dapat diprediksi. RFC 2045 pembungkus base64 menambahkan satu CRLF (2 bytes) per 76 karakter keluaran. Untuk file 10 KB, Base64 kira-kira berukuran 13.3 KB, ditambah CRLF setiap 76 karakter: total sekitar 13.5 KB. Overheadnya kira-kira sepertiga byte lebih banyak.
Batasan ukuran email biasanya dinyatakan untuk ukuran yang dikodekan, bukan ukuran file asli; server email dengan batas 25 MB berarti 25 MB dari pesan yang disandikan, bukan 25 MB lampiran. Menghitung ukuran file asli memerlukan pembagian dengan 1.33 (atau lebih tepatnya, dengan 4 dibagi 3). Pengkodean yang dapat dicetak dengan kutipan adalah alternatif yang menjaga ASCII yang dapat dicetak tidak berubah dan hanya mengkodekan byte 128-255 dan beberapa karakter khusus.
Contoh praktis: membaca sumber pesan mentah — menemukan bagian Base64 dan mendekode lampiran teks kecil
File teks dengan sebagian besar ASCII tetap dapat dibaca jika Anda membuka sumber pesan mentah. Base64 mengaburkan segalanya, bahkan teks biasa ASCII. Quote-printable jarang digunakan untuk file biner (akan sangat tidak efisien untuk PDF) tetapi terkadang digunakan untuk teks. Pembaca email memilih pengkodean berdasarkan jenis lampiran; browser biasanya tidak menanyakan kepada pengguna pengkodean mana yang akan diterapkan.
Isi pesan email Base64 hanyalah byte itu sendiri, bukan file terpisah. Saat Anda melihat lampiran di pembaca email, pembaca telah mendekode Base64 dan menampilkan file asli.
Biaya ukuran dalam praktiknya — kira-kira sepertiga byte lebih banyak, dan mengapa batas ukuran email dinyatakan untuk ukuran yang dikodekan
Jika Anda melihat sumber pesan mentah (pilihan di sebagian besar klien email), Anda akan melihat header MIME dan isi yang dikodekan Base64. Alat encoder & decoder Base64 dapat membantu Anda mendekode fragmen sumber pesan secara manual; salin bagian Base64, hapus jeda baris, dan tempel ke alat.
Beberapa lampiran dalam pesan MIME menggunakan batas multibagian. Setiap bagian memiliki headernya sendiri (Tipe Konten, Pengkodean-Transfer-Konten) dan isi. Versi pesan alternatif teks biasa muncul sebagai satu bagian, dan setiap lampiran muncul sebagai bagian lain. Tali pembatas memisahkan bagian-bagiannya; itu dipilih untuk tidak muncul di konten bagian mana pun. Pembaca email merekonstruksi pesan dengan menguraikan batas-batas dan mendekode setiap bagian sesuai dengan header Content-Transfer-Encoding-nya.
Apa yang tidak tercakup di sini — header kata yang dikodekan, S/MIME dan ekstensi 8BITMIME secara mendalam
RFC 2045 pengkodean base64 tidak universal saat ini. Beberapa sistem email mendukung transportasi 8-bit dan tidak lagi memerlukan base64. Beberapa sistem menggunakan nama pengkodean yang berbeda atau menambahkan header khusus. Namun base64 dengan baris karakter 76 tetap menjadi pilihan paling kompatibel untuk lampiran yang harus menjangkau sistem email mana pun, di mana pun. Saat Anda melampirkan file menggunakan klien email, klien biasanya memilih base64 secara otomatis untuk file biner, menangani pembungkusan baris, dan menambahkan header MIME.
Memahami mekanisme ini membantu Anda melakukan debug ketika lampiran tampak rusak atau ketika Anda bekerja secara manual dengan sumber pesan. Membuat atau menguraikan pesan email keluar memerlukan pemahaman struktur MIME. Perpustakaan harus menangani pengkodean, pembungkusan baris dan header; Anda biasanya tidak membuat MIME secara manual. Namun jika Anda mengurai sumber pesan mentah (men-debug masalah pengiriman, atau mengekstrak lampiran secara terprogram), mengetahui bahwa Content-Transfer-Encoding: base64 berarti isi berikut adalah 76-character-wrapped base64 memungkinkan Anda menerapkan dekoder yang tepat.
Kesimpulan: Base64 adalah lapisan kompatibilitas email — bagaimana encoder & decoder Base64 memungkinkan Anda membaca bagian teks kecil dari pesan mentah secara lokal
Base64 itu sendiri adalah standar RFC 4648; header pembungkus dan MIME khusus untuk email. Lampiran email adalah base64 karena email dibuat untuk teks biasa dan base64 adalah lapisan kompatibilitas paling sederhana dan paling universal untuk mengirim data biner melalui protokol hanya teks. Batas baris karakter 76 adalah artefak historis dari terminal tahun 1980-an dan jaringan lambat, namun tetap menjadi standar kompatibilitas.
Memahami riwayat ini menjelaskan mengapa MIME ada, mengapa ada beberapa opsi pengkodean, dan mengapa base64 tetap menjadi default untuk lampiran meskipun sistem email modern dapat mendukung biner secara langsung. Encoder & decoder Base64 memungkinkan Anda bekerja secara manual dengan badan MIME untuk memverifikasi atau men-debug pengkodean.