Skip to main content

Kaip veikia "Base64 Encoding"

Anonim

Jei internetas yra informacijos greitkelis, tada el. Pašto kelias yra siauras takas. Tik labai maži vežimėliai gali praeiti.

Elektroninio pašto transporto sistema sukurta tik paprastam ASCII tekstui. Bandymas išsiųsti tekstą kitomis kalbomis ar savavališkai yra panašus į tai, kad sunkvežimį važiuoti į kalvą.

Kaip "Big Truck" eina per "Ravine"?

Tada kaip jūs siunčiate didelį sunkvežimį per mažą griovį? Viename gale turite paimti gabalėlius, per gabalus gabenkite per griovį ir perkelkite autokrautuvą iš kito galo.

Tas pats pasitaiko, kai išsiųsite failo priedą el. Paštu. Binarinių duomenų kodavime procesas vadinamas ASCII tekstu, kuris gali būti transportuojamas el. Paštu be problemų. Gavėjo pabaigoje duomenys dekoduojami ir originalus failas yra pertvarkytas.

Vienas būdas koduoti savavališkus duomenis kaip paprastą ASCII tekstą yra Base64. Tai yra vienas iš metodų, naudojamų pagal MIME standartą, norint siųsti duomenis, išskyrus paprastą tekstą.

Base64 prie gelbėjimo

"Base64" kodavimas tris baitus, kurių kiekvienas susideda iš aštuonių bitų, ir nurodo juos kaip keturis spausdintus simbolius ASCII standarte. Tai daro iš esmės dviem etapais.

Pirmasis žingsnis yra paversti tris baitus keturiais šešių bitų skaičiais. Kiekvienas ASCII standarto simbolis susideda iš septynių bitų. "Base64" naudoja tik 6 bitus (atitinka 2 ^ 6 = 64 simbolius), kad užtikrintų, kad užkoduoti duomenys būtų spausdinami ir kad juos būtų lengviau skaityti. Nenaudojamas ASCII specialių simbolių.

64 simboliai (taigi ir pavadinimas Base64) yra 10 skaitmenų, 26 mažos raidės, 26 didieji raidės, taip pat "+" ir "/".

Jei, pavyzdžiui, trys baitai yra 155, 162 ir 233, atitinkamas (ir bauginantis) bitų srautas yra 100110111010001011101001, kuris savo ruožtu atitinka 6 bitų vertes 38, 58, 11 ir 41.

Antrame etape šie skaičiai paverčiami ASCII simboliais naudojant Base64 kodavimo lentelę. 6-bitų mūsų pavyzdyje pateiktos vertes paverčia ASCII sekcija "m6Lp".

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 -> m
  • 58 -> 6
  • 11 -> L
  • 41 -> p

Šis dviejų žingsnių procesas taikomas visai koduotų baitų sekai. Siekiant užtikrinti, kad užkoduoti duomenys būtų tinkamai išspausdinti ir neviršytų jokio pašto serverio linijos ilgio, naujos eilutės simboliai yra įterpti, kad linijų ilgis būtų mažesnis nei 76 simboliai. Newline simboliai yra užkoduoti kaip visi kiti duomenys.

Endgame sprendimo sprendimas

Kodavimo proceso pabaigoje gali kilti problema. Jei pradinių duomenų dydis baitais yra tris kartus, viskas gerai veikia. Jei taip nėra, mes galime pasiekti vieną ar du 8-bitų baitų. Norint tinkamai koduoti, mes turime tiksliai tris baitus.

Sprendimas yra pridėti pakankamai baitų, kurių reikšmė yra 0, kad būtų sukurta 3 baitų grupė. Pridedamos dvi tokios vertės, jei mes turime vieną papildomą duomenų baitą, o kitas - du papildomus baitus.

Žinoma, šie dirbtiniai trailing "0" kodai negali būti užkoduoti naudojant žemiau pateiktą kodavimo lentelę. Juose turi būti 65 simbolių.

"Base64" užpildo simbolis yra "=". Žinoma, jis gali pasirodyti tik užkoduotų duomenų pabaigoje.

Base64 kodavimo lentelė

VertėChar VertėChar VertėChar VertėChar
0A 16Q. 32g 48w
1B 17R 33h 49x
2C 18S 34i 50y
3D 19T 35j 51z
4E 20U 36k 520
5F 21V 37l 531
6G 22W 38m 542
7H 23X 39n 553
8 24Y 40o 564
9J 25Z 41p 575
10K 26a 42q 586
11L 27b 43r 597
12M 28c 44s 608
13N 29d 45t 619
14O 30e 46tu 62+
15P 31f 47v 63/