Paano Gumagana ang Base64 Encoding

Kung ang internet ay ang highway ng impormasyon, ang path para sa email ay isang makitid na bangin. Tanging napakaliit na mga kariton ang maaaring pumasa.

Ang sistema ng transportasyon ng email ay idinisenyo para lamang sa simpleng ASCII na teksto. Ang pagsusumikap na magpadala ng teksto sa iba pang mga wika o mga arbitrary na file ay tulad ng pagkuha ng isang trak sa pamamagitan ng bangin.

Paano Pumunta ang Big Truck Sa pamamagitan ng Ravine?

Kung gayon, paano ka magpadala ng isang malaking trak sa isang maliit na bangin? Kailangan mong dalhin ito sa isang dulo, dalhin ang mga piraso sa pamamagitan ng bangin, at muling itayo ang trak mula sa mga piraso sa kabilang dulo.

Ang parehong nangyayari kapag nagpadala ka ng isang file attachment sa pamamagitan ng email . Sa isang proseso na kilala bilang encoding ang binary data ay transformed sa ASCII teksto, na maaaring transported sa email nang walang problema. Sa dulo ng tagatanggap, ang data ay decoded at ang orihinal na file ay itinayong muli.

Isang paraan ng pag-encode ng di-makatwirang data bilang plain ASCII na teksto ay Base64. Isa ito sa mga pamamaraan na ginagamit ng pamantayan ng MIME upang magpadala ng data maliban sa plain text .

Base64 sa Pagsagip

Ang pag-encode sa Base64 ay tumatagal ng tatlong byte, bawat isa ay binubuo ng walong bits, at kumakatawan sa mga ito bilang apat na napi-print na mga character sa ASCII standard. Ginagawa iyan sa mahalagang dalawang hakbang.

Ang unang hakbang ay ang pag-convert ng tatlong byte sa apat na numero ng anim na piraso. Ang bawat karakter sa pamantayan ng ASCII ay binubuo ng pitong bits. Ang Base64 ay gumagamit lamang ng 6 bits (katumbas ng 2 ^ 6 = 64 na mga character) upang matiyak na ang naka-encode na data ay maaaring i-print at pantaong nababasa. Wala sa mga espesyal na character na magagamit sa ASCII ang ginagamit.

Ang 64 na character (samakatuwid ang pangalan na Base64) ay 10 digit, 26 maliliit na character, 26 malalaki na character pati na rin ang '+' at '/'.

Kung halimbawa, ang tatlong byte ay 155, 162 at 233, ang kaukulang (at nakakatakot) bit stream ay 100110111010001011101001, na kung saan ay tumutugma sa 6-bit na halaga 38, 58, 11 at 41.

Ang mga numerong ito ay binago sa mga character na ASCII sa pangalawang hakbang gamit ang Base64 encoding table. Ang 6-bit na halaga ng aming halimbawa ay isalin sa ASCII sequence na "m6Lp".

Ang dalawang hakbang na proseso ay inilalapat sa buong pagkakasunud-sunod ng mga byte na naka-encode. Upang matiyak na ang naka-encode na data ay maaaring maayos na nakalimbag at hindi lumampas sa limitasyon ng haba ng linya ng anumang mail server, ang mga bagong linya ng character ay ipinasok upang mapanatili ang haba ng linya sa ibaba 76 na mga character. Ang mga bagong linya ng character ay naka-encode tulad ng lahat ng iba pang data.

Paglutas ng Endgame

Sa dulo ng proseso ng pag-encode, maaaring tumakbo tayo sa isang problema. Kung ang sukat ng orihinal na data sa bytes ay isang maramihang ng tatlo, lahat ng bagay ay gumagana pagmultahin. Kung hindi, maaari tayong magtapos ng isa o dalawang 8-bit na byte. Gayunpaman, para sa tamang pag-encode, kailangan namin ng eksaktong tatlong byte.

Ang solusyon ay upang magdagdag ng sapat na mga byte na may halaga na '0' upang lumikha ng isang 3-byte na pangkat. Dalawang mga naturang halaga ang nakadugtong kung mayroon kaming isang dagdag na byte ng data, ang isa ay nakadugtong para sa dalawang dagdag na byte.

Of course, ang mga artipisyal na trailing '0 ay hindi ma-encode gamit ang encoding table sa ibaba. Dapat silang kinakatawan ng ika-65 character.

Ang Base64 padding character ay '='. Naturally, maaari lamang itong lumitaw sa dulo ng naka-encode na data.

Base64 Encoding Table

Halaga Char Halaga Char Halaga Char Halaga 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 Ako 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 /