Bahasa Melayu

Alat pembangun · Pengekod & penyahkod Base64

Mengapa lampiran e-mel adalah Base64: MIME, 7-bit transport dan 76-garisan lajur

· Latar belakang

asas64 pengekodan

MIME Pengepala Content-Transfer-Encoding dan 76-character Base64 line wrapping untuk pengangkutan e-mel
Ilustrasi vektor ToolAcre asal

E-mel telah dibina untuk teks 7-bit ASCII dan lampiran perlu dimuatkan melaluinya. Siaran ini mengesan cara MIME menerima pakai Base64, sebab baris dibalut pada 76 aksara dan maksudnya untuk saiz dan penyahpepijatan.

Lampiran yang tiba rosak melalui geganti lama — masalah 8-bit yang MIME dicipta untuk diselesaikan

E-mel telah direka pada tahun 1970-an dan 1980-an untuk 7-sedikit ASCII teks sahaja. SMTP, protokol yang membawa e-mel, menjangkakan setiap baris adalah paling banyak 998 watak-watak daripada 7-sedikit ASCII (watak 0-127). Menghantar fail binari seperti a PDF atau imej terus melalui SMTP akan gagal: bait 128-255 akan rosak atau ditolak oleh pelayan mel dan geganti lama. Lampiran memerlukan pengekodan. MIME (Sambungan Mel Internet Serbaguna, RFC 2045) menyelesaikannya dengan menentukan nilai pengepala Content-Transfer-Encoding, termasuk base64, yang mewakili sebarang jujukan bait sebagai 7-sedikit ASCII teks.

MIME menawarkan beberapa pilihan Pemindahan-Pengekodan Kandungan: 7bit (tiada pengekodan, sahaja untuk selamat ASCII), 8bit (untuk pelayan yang menyokong 8-bit bait, bukan universal (boleh dicetak dengan petikan sahaja), tidak boleh disimpan dalam kod sahaja ASCII boleh dibaca), dan base64 (mengekodkan segala-galanya, memaksimumkan keserasian). Base64 dipilih untuk lampiran binari kerana ia ringkas, diseragamkan dan menjamin keselamatan pada mana-mana sistem mel, tidak kira berapa lama atau ketat 7-bit-sahaja. Tukar ganti ialah saiz: Base64 adalah kira-kira satu pertiga lebih besar daripada bait asal.

Masalah pengangkutan diselesaikan Base64 — mewakili bait sewenang-wenang dengan aksara boleh cetak

A 3 KB PDF menjadi kira-kira 4 KB teks Base64. Had baris aksara 76 berasal daripada RFC 2045.

SMTP membenarkan baris sehingga 998 aksara, tetapi sistem mel lama dan beberapa penapis spam menolak baris panjang. RFC 2045 menentukan bahawa MIME Base64 baris tidak boleh melebihi 76 aksara (ditambah dengan CRLF penghujung baris), jadi pelayan mel tidak akan pernah memutuskan pengangkutan. Hadnya tidak ajaib; ia adalah kompromi sejarah antara kebolehbacaan (76 aksara sesuai dengan kebanyakan terminal 1980-an), keserasian dengan sistem lama dan mengelakkan pengesanan sebagai pola spam atau virus.

Pilihan output yang boleh dilihat dalam alat ini — pelapik berkanun dan pembalut aksara 76 pilihan

Sistem mel moden biasanya menyokong talian yang lebih panjang, tetapi pengekodan kepada barisan aksara 76 memastikan lampiran itu sampai ke penerima yang paling lama sekalipun. Selepas RFC 2045 ditakrifkan MIME Base64, RFC 4288 (jenis media) dan RFC 2183 (Kandungan-Pelupusan) menambah cara standard untuk melabelkan lampiran. Mesej dengan lampiran PDF termasuk pengekodan Pemindahan-Kandungan: base64, pengepala Jenis Kandungan: application/pdf dan PDF bait yang dikodkan sebagai Base64 dengan baris aksara 76. Pembaca mel menyahkod baris dengan mengalih keluar pemisah baris (CRLF aksara) dan kemudian menyahkod Base64 untuk memulihkan bait asal.

Menyahkod lampiran MIME Base64 memerlukan mengabaikan ruang kosong. RFC berkata: penyahkod mesti melangkau pemisah baris (aksara CR dan LF) semasa penyahkodan. Inilah sebabnya mengapa penyahkod Base64 yang menerima ruang kosong adalah praktikal; kebanyakan mel MIME sebenar akan mempunyai pemisah talian. Sesetengah penyahkod adalah ketat dan menolak ruang kosong (sesuai untuk konteks seperti JWT, di mana pemisah baris tidak sepatutnya ada), manakala yang lain adalah lembut dan langkau ruang kosong (sesuai untuk MIME).

Pilihan aksara 76 dalam amalan — cara pengekod memasukkan dan penyahkod mengabaikan pemisah talian

Alat pengekod & penyahkod Base64 boleh mengendalikan kedua-duanya: ia menerima lampiran tampal berbilang baris dan mengabaikan pemisah baris semasa penyahkod. Kesan saiz boleh diramalkan. RFC 2045 base64 wrapping menambahkan satu CRLF (2 bytes) setiap 76 aksara output. Untuk fail 10 KB, Base64 adalah kira-kira 13.3 KB, ditambah CRLF setiap 76 aksara: kira-kira 13.5 KB jumlah. Overhed adalah kira-kira satu pertiga lagi bait.

Had saiz e-mel biasanya dinyatakan untuk saiz yang dikodkan, bukan saiz fail asal; pelayan mel dengan had 25 MB bermakna 25 MB daripada mesej yang dikodkan, bukan 25 MB lampiran. Mengira saiz fail asal memerlukan pembahagian dengan 1.33 (atau lebih tepat lagi, dengan 4 dibahagikan dengan 3). Pengekodan boleh cetak petikan ialah alternatif yang mengekalkan ASCII yang boleh dicetak tidak berubah dan mengekod sahaja bait 128-255 dan beberapa aksara khas.

Contoh yang berjaya: membaca sumber mesej mentah — mencari bahagian Base64 dan menyahkod lampiran teks kecil

Fail teks dengan kebanyakannya ASCII kekal boleh dibaca jika anda membuka sumber mesej mentah. Base64 mengaburkan segala-galanya, walaupun teks biasa ASCII. Boleh dicetak disebut jarang digunakan untuk fail binari (ia akan menjadi sangat tidak cekap untuk PDF) tetapi kadangkala digunakan untuk teks. Pembaca mel memilih pengekodan berdasarkan jenis lampiran; pelayar biasanya tidak meminta pengguna pengekodan yang hendak digunakan.

Badan Base64 mesej e-mel hanyalah bait itu sendiri, bukan fail berasingan. Apabila anda melihat lampiran dalam pembaca mel, pembaca telah menyahkod Base64 dan menunjukkan fail asal.

Kos saiz dalam amalan — kira-kira satu pertiga lagi bait, dan sebab had saiz mel dinyatakan untuk saiz yang dikodkan

Jika anda melihat sumber mesej mentah (pilihan dalam kebanyakan klien mel), anda akan melihat pengepala MIME dan badan yang dikodkan Base64. Alat pengekod & penyahkod Base64 boleh membantu anda menyahkod secara manual serpihan sumber mesej; salin bahagian Base64, keluarkan pemisah baris, dan tampalkannya ke dalam alat.

Berbilang lampiran dalam mesej MIME menggunakan sempadan berbilang bahagian. Setiap bahagian mempunyai pengepala sendiri (Jenis Kandungan, Pengekodan Pemindahan Kandungan) dan badan. Versi alternatif teks biasa bagi mesej muncul sebagai satu bahagian, dan setiap lampiran muncul sebagai bahagian lain. Rentetan sempadan memisahkan bahagian; ia dipilih untuk tidak muncul dalam kandungan mana-mana bahagian. Pembaca mel membina semula mesej dengan menghuraikan sempadan dan menyahkod setiap bahagian mengikut pengepala Kandungan-Pindah-Pengekodannya.

Perkara ini tidak meliputi — pengepala perkataan berkod, S/MIME dan sambungan 8BITMIME secara mendalam

RFC 2045 pengekodan base64 tidak universal hari ini. Sesetengah sistem mel menyokong pengangkutan 8-bit dan tidak lagi memerlukan base64. Sesetengah sistem menggunakan nama pengekodan yang berbeza atau menambah pengepala tersuai. Tetapi base64 dengan 76-garisan aksara kekal sebagai pilihan yang paling serasi untuk lampiran yang mesti mencapai mana-mana sistem mel, di mana-mana sahaja. Apabila anda melampirkan fail menggunakan klien mel, klien biasanya memilih base64 secara automatik untuk fail binari, mengendalikan pembalut baris dan menambah pengepala MIME.

Memahami mekanisme membantu anda nyahpepijat apabila lampiran kelihatan rosak atau apabila anda bekerja secara manual dengan sumber mesej. Membina atau menghuraikan mesej e-mel keluar memerlukan pemahaman struktur MIME. Perpustakaan harus mengendalikan pengekodan, pembalut baris dan pengepala; anda biasanya tidak membina MIME secara manual. Tetapi jika anda menghuraikan sumber mesej mentah (menyahpepijat isu penghantaran, atau mengekstrak lampiran secara pengaturcaraan), mengetahui bahawa Content-Transfer-Encoding: base64 bermakna badan berikut ialah 76-character-wrapped base64 membolehkan anda menggunakan penyahkod yang betul.

Bawa pulang: Base64 ialah lapisan keserasian e-mel — cara pengekod & penyahkod Base64 membolehkan anda membaca bahagian teks kecil daripada mesej mentah secara setempat

Base64 itu sendiri ialah standard RFC 4648; pengepala pembalut dan MIME adalah khusus untuk e-mel. Lampiran e-mel adalah base64 kerana e-mel dibina untuk teks biasa dan base64 ialah lapisan keserasian paling mudah dan paling universal untuk menghantar data binari melalui protokol teks sahaja. Had baris aksara 76 ialah artifak sejarah terminal 1980-an dan rangkaian perlahan, tetapi ia kekal sebagai standard untuk keserasian.

Memahami sejarah ini menerangkan sebab MIME wujud, sebab terdapat berbilang pilihan pengekodan dan sebab base64 kekal sebagai lalai untuk lampiran walaupun sistem mel moden boleh menyokong binari secara langsung. Pengekod & penyahkod Base64 membolehkan anda bekerja secara manual dengan badan MIME untuk mengesahkan atau nyahpepijat pengekodan.