Bagaimana Pengkodan Base64 berfungsi

Jika internet adalah lebuh raya maklumat, maka jalan untuk e-mel adalah jurang sempit. Hanya kereta kecil yang boleh dilalui.

Sistem pengangkutan e-mel direka untuk teks ASCII biasa sahaja. Cuba menghantar teks dalam bahasa lain atau fail sewenang-wenangnya adalah seperti mendapatkan trak melalui jurang.

Bagaimana Lori Besar pergi Melalui Ravine?

Kemudian bagaimana anda menghantar trak besar melalui jurang kecil? Anda perlu mengambilnya di satu hujung, mengangkut kepingan melalui jurang, dan membina semula trak dari kepingan di hujung yang lain.

Perkara yang sama berlaku apabila anda menghantar lampiran fail melalui e-mel . Dalam proses yang dikenali sebagai pengekodan data binari diubah menjadi teks ASCII, yang boleh diangkut dalam e-mel tanpa masalah. Pada hujung penerima, data dikodkan dan fail asal dibina semula.

Satu kaedah pengekodan data sewenang-wenang sebagai teks ASCII yang jelas adalah Base64. Ia adalah salah satu teknik yang digunakan oleh piawaian MIME untuk menghantar data selain daripada teks biasa .

Base64 kepada Penyelamat

Pengekodan Base64 mengambil tiga bait, masing-masing terdiri daripada lapan bit, dan mewakilinya sebagai empat aksara yang boleh dicetak dalam piawaian ASCII. Ia melakukannya pada dasarnya dua langkah.

Langkah pertama ialah menukar tiga bait ke empat nombor enam bit. Setiap watak dalam piawaian ASCII terdiri daripada tujuh bit. Base64 hanya menggunakan 6 bit (bersamaan dengan 2 ^ 6 = 64 aksara) untuk memastikan data yang dikodkan boleh dicetak dan dibaca secara manusia. Tiada aksara khas yang terdapat di ASCII digunakan.

64 aksara (dengan itu nama Base64) adalah 10 digit, 26 huruf kecil, 26 aksara besar serta '+' dan '/'.

Jika misalnya, tiga bait ialah 155, 162 dan 233, aliran bit yang sepadan (dan menakutkan) adalah 100110111010001011101001, yang seterusnya sepadan dengan nilai 6-bit 38, 58, 11 dan 41.

Nombor ini ditukar kepada aksara ASCII dalam langkah kedua menggunakan jadual pengekodan Base64. Nilai 6-bit contoh kami diterjemahkan ke urutan ASCII "m6Lp".

Proses dua langkah ini diterapkan ke keseluruhan urutan bait yang dikodkan. Untuk memastikan data yang dikodkan boleh dicetak dengan betul dan tidak melebihi had panjang baris pelayan surat, aksara baris baru dimasukkan untuk mengekalkan panjang baris di bawah 76 aksara. Aksara baru yang dikodkan seperti semua data lain.

Menyelesaikan Endgame

Pada akhir proses pengekodan, kita mungkin menghadapi masalah. Jika saiz data asal dalam bait adalah gandaan tiga, semuanya berfungsi dengan baik. Sekiranya tidak, kita mungkin mempunyai satu atau dua bait 8-bit. Walau bagaimanapun, untuk pengekodan yang betul, kita memerlukan hanya tiga bait.

Penyelesaiannya adalah untuk menambah bait yang cukup dengan nilai '0' untuk membuat kumpulan 3-bait. Dua nilai sedemikian dilampirkan jika kita mempunyai satu lagi byte data, satu dilampirkan untuk dua bait tambahan.

Sudah tentu, trailing buatan ini '0 tidak dapat dikodkan menggunakan jadual pengekodan di bawah. Mereka mesti diwakili oleh watak ke-65.

Watak padat Base64 ialah '='. Sememangnya, ia hanya boleh muncul pada akhir data yang dikodkan.

Jadual Pengkod Base64

Nilai Char Nilai Char Nilai Char Nilai Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 Saya 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /