Saya membaca tentang encoding Base64, dan menemukan ini di Wikipedia:
Skema pengkodean Base64 umumnya digunakan ketika ada kebutuhan untuk menyandikan data biner yang perlu disimpan dan ditransfer melalui media yang dirancang untuk menangani data tekstual.
... dan contoh yang diberikan adalah mengirim file biner melalui email.
Saya mencoba memahami mengapa base64 diperlukan. Karena data biner adalah sekelompok byte, bukankah itu dapat langsung diterjemahkan ke ASCII, yang merupakan data tekstual? Mengapa base64 diperlukan sama sekali? Atau apakah email memiliki masalah dengan karakter kontrol di ASCII?
Jawaban:
Ada artikel Wikipedia yang bagus tentang ini.
Iterasi NCP yang paling awal seperti yang digunakan oleh ARPAnet lebih seperti bit stream daripada byte stream, atau upaya untuk menegosiasikan ukuran byte yang nyaman; byte 8-bit hanya distandarisasi jauh kemudian. Ada juga beberapa upaya membuat protokol transfer file yang akan berfungsi di mesin yang berbeda (mail pada awalnya merupakan fungsi dari protokol FTP, terutama sebagai
MAIL
danMLFL
perintah, kemudian dipecah menjadi MTP , kemudian SMTP .). Mesin-mesin itu sering memiliki pengkodean karakter yang berbeda - ASCII vs EBCDIC - atau bahkan ukuran byte yang berbeda, byte 8-bit vs 6-bit ...Oleh karena itu, fungsi transfer surat pada awalnya didefinisikan untuk mentransfer pesan yang relatif singkat dalam teks biasa; khusus, "NVT-ASCII". Misalnya, RFC 772 mengatakan:
Meskipun delapan bit ditransmisikan melalui kabel, bit ke-8 sering dibuang atau hancur, karena tidak ada persyaratan untuk melestarikannya; pada kenyataannya, beberapa protokol mengharuskan bit ke-8 diatur ke nol, seperti RFC SMTP awal seperti dikutip di bawah ini. Dengan kata lain, perangkat lunak itu tidak 8-bit bersih .
Ini bertahan untuk waktu yang lama bahkan setelah pengkodean karakter ISO-8859-# 8-bit menjadi luas. Meskipun beberapa server sudah bersih 8-bit, banyak yang lain tidak, dan secara acak mengirim data 8 bit akan menghasilkan pesan yang rusak.
Kemudian, "Extended SMTP" diterbitkan, memungkinkan server mail untuk menyatakan ekstensi SMTP yang mereka dukung; salah satunya adalah
8BITMIME
, menunjukkan bahwa server penerima dapat dengan aman menerima data 8-bit. Bagian pesan MIME dapat memiliki " Content-Transfer-Encoding : 8bit", yang menunjukkan bahwa mereka tidak dikodekan dengan cara apa pun.Namun, protokol SMTP tetap berbasis garis dan memiliki batas garis oktet 998, serta menggunakan
.
garis (0D 0A 2E 0D 0A) sebagai indikator "akhir pesan". Ini berarti bahwa meskipun sebagian besar file biner dapat dikirim tanpa diubah, masih mungkin bahwa file yang berisi urutan oktet ini akan ditafsirkan sebagai akhir dari pesan yang ditransfer, dan sisa file sebagai perintah SMTP, mungkin menyebabkan kerusakan. Demikian pula, "garis" lebih dari 998 oktet mungkin terputus oleh server penerima.Pada tahun 2000, ekstensi ESMTP "BINARYMIME" diterbitkan sebagai RFC 3030 , memungkinkan transfer data biner mentah melalui SMTP. Pesan sekarang ditransfer dalam potongan panjang yang telah ditentukan sebelumnya, dengan potongan nol panjang digunakan sebagai terminator, dan Base64 & pengkodean serupa tidak diperlukan lagi. Sayangnya, beberapa server SMTP mendukung ekstensi ini; misalnya, Postfix atau Exim4 tidak beriklan
CHUNKING
sebagai balasan untuk EHLO. Untuk memanfaatkan BINARYMIME, itu harus didukung oleh semua server di jalur pesan, yang bisa lebih dari satu atau dua.Lihat juga:
sumber
Beberapa sistem dan perangkat lunak surel yang lebih lama tidak bersih 8-bit , bit ke-8 digunakan sebagai karakter kontrol. Ini cukup untuk membersihkan file biner, oleh karena itu Base64 (atau skema penyandian lainnya) diperlukan.
sumber