Paano Gumagana ang Base64 Encoding

Talaan ng mga Nilalaman:

Paano Gumagana ang Base64 Encoding
Paano Gumagana ang Base64 Encoding
Anonim

Ang Base64 encoding ay isang proseso ng pag-convert ng binary data sa ASCII string format sa pamamagitan ng pag-convert sa binary data na iyon sa isang 6-bit na representasyon ng character. Ang Base64 na paraan ng pag-encode ay ginagamit kapag ang binary data, gaya ng mga larawan o video, ay ipinadala sa mga system na idinisenyo upang magpadala ng data sa isang plain-text (ASCII) na format.

Bakit Ginagamit ang Base64 Encoding?

Ang pangangailangan para sa Base64 encoding ay nagmumula sa mga problemang nangyayari kapag ang media ay ipinadala sa raw binary na format sa mga text-based na system.

Dahil ang mga text-based na system (tulad ng email) ay binibigyang-kahulugan ang binary data bilang isang malawak na hanay ng mga character, kabilang ang mga espesyal na command character, karamihan sa binary data na ipinadala sa paglilipat ng media ay napagkakamalan ng mga system na iyon at nawala o nasira sa ang proseso ng paghahatid.

Image
Image

Ang isang paraan ng pag-encode ng ganitong uri ng binary data sa paraang makaiwas sa mga ganitong problema sa paghahatid ay ang ipadala ito bilang plain ASCII text sa Base64 na naka-encode na format. Isa ito sa mga diskarteng ginagamit ng pamantayan ng MIME upang magpadala ng data maliban sa plain text.

Maraming mga programming language, gaya ng PHP at Javascript, ang may kasamang Base64 encoding at decoding function upang mabigyang-kahulugan ang data na ipinadala gamit ang Base64 encoding.

Base64 Encoding Logic

Ang Base64 encoding ay hinahati ang binary data sa 6-bit na mga segment ng 3 buong byte at kinakatawan ang mga iyon bilang mga napi-print na character sa ASCII standard. Ginagawa nito iyon sa mahalagang dalawang hakbang.

Ang unang hakbang ay hatiin ang binary string sa 6-bit na mga bloke. Gumagamit lang ang Base64 ng 6 bits (naaayon sa 2^6=64 na character) para matiyak na napi-print at nababasa ng tao ang naka-encode na data. Wala sa mga espesyal na character na available sa ASCII ang ginagamit.

Ang 64 na character (kaya ang pangalang Base64) ay 10 digit, 26 lowercase na character, 26 uppercase na character pati na rin ang Plus sign (+) at Forward Slash (/). Mayroon ding ika-65 na karakter na kilala bilang pad, na siyang Equal sign (=). Ginagamit ang character na ito kapag ang huling segment ng binary data ay hindi naglalaman ng buong 6 na bits.

Base64 Encoding Example

Halimbawa, kumuha ng tatlong numero ng ASCII 155, 162, at 233. Ang tatlong numerong ito ay bumubuo ng binary stream na 100110111010001011101001. Ang binary file, tulad ng isang imahe, ay naglalaman ng binary stream na tumatakbo sa sampu o daan-daang libong zeroes at isa.

Nagsisimula ang Base64 encoder sa pamamagitan ng paghahati sa binary stream sa mga pagpapangkat ng anim na character: 100110 111010 001011 101001. Ang bawat isa sa mga pagpapangkat na ito ay isinasalin sa mga numerong 38, 58, 11, at 41.

Nagko-convert ang anim na character na binary stream sa pagitan ng binary (o base-2) sa decimal (base-10) na mga character sa pamamagitan ng pag-square sa bawat value na kinakatawan ng 1 sa binary sequence kasama ang positional square nito. Simula sa kanan at pakaliwa, at nagsisimula sa zero, ang mga value sa binary stream ay kumakatawan sa 2^0, pagkatapos ay 2^1, pagkatapos ay 2^2, pagkatapos ay 2^3, pagkatapos ay 2^4, pagkatapos ay 2^5.

Narito ang isa pang paraan para tingnan ito. Simula sa kaliwa, ang bawat posisyon ay nagkakahalaga ng 1, 2, 4, 8, 16, at 32. Kung ang binary number ay may 1 sa slot, idagdag mo ang halagang iyon; kung mayroon itong 0 sa slot, wala ka. Ang binary string 100110 ay nagko-convert sa decimal na numero 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.

Kinukuha ng Base64 encoding ang binary string na ito at hinahati-hati ito sa mga 6-bit na value na 38, 58, 11 at 41.

Sa wakas, ang mga numerong ito ay na-convert sa mga ASCII na character gamit ang Base64 encoding table. Ang mga 6-bit na value ng halimbawang ito ay isinasalin sa ASCII sequence m6Lp.

Gamit ang Base64 conversion table:

  • Ang 38 ay m
  • Ang 58 ay 6
  • Ang 11 ay L
  • Ang 41 ay p

Ang dalawang-hakbang na prosesong ito ay inilapat sa buong binary string na naka-encode.

Upang matiyak na ang naka-encode na data ay maipi-print nang maayos at hindi lalampas sa limitasyon sa haba ng linya ng anumang mail server, ipinapasok ang mga newline na character upang panatilihing mababa sa 76 na character ang haba ng linya. Ang mga newline na character ay naka-encode tulad ng lahat ng iba pang data.

Ang buong layunin ng Base64 encoding, mula sa pagdaragdag ng padding upang mapanatili ang 3-byte na binary na mga segment hanggang sa pag-convert ng binary sa text gamit ang Base64 table, ay upang mapanatili ang integridad ng ipinadalang binary na impormasyon.

Base64 Encoding Table

Isinasalin ng sumusunod na talahanayan ang lahat ng 64 na character na ginamit sa Base64 encoding.

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 55 3
8 I 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 /

Paglutas ng Endgame

Sa pagtatapos ng proseso ng pag-encode, maaaring may problema. Kung ang laki ng orihinal na data sa mga byte ay isang multiple ng tatlo, lahat ay gumagana nang maayos. Kung hindi, maaaring may mga walang laman na byte. Para sa wastong pag-encode, eksaktong 3-bytes ng binary data ang kailangan.

Ang solusyon ay magdagdag ng sapat na byte na may halagang 0 upang lumikha ng 3-byte na pangkat. Dalawang ganoong value ang idinadagdag kung kailangan ng data ng isang dagdag na byte ng data, ang isa ay idinadagdag para sa dalawang dagdag na byte.

Siyempre, ang mga artificial trailing na '0 na ito ay hindi maaaring i-encode gamit ang encoding table sa ibaba. Dapat silang katawanin ng isang ika-65 na karakter. Ang Base64 padding character ay ang Equal sign (=) at inilalagay sa dulo ng naka-encode na data.

Inirerekumendang: