Skip to main content

Kā darbojas Base64 kodēšana

Anonim

Ja internets ir informācijas ceļš, tad e-pasta ceļš ir šaurs grava. Var pāriet tikai ļoti mazi ratiņi.

E-pasta transporta sistēma ir paredzēta tikai vienkāršai ASCII tekstu. Centieni nosūtīt tekstu citās valodās vai patvaļīgi faili ir tādi kā kravas automašīnas paņemšana pa gravu.

Kā Big Truck iet cauri Ravine?

Tad kā jūs sūtat lielu kravas automašīnu caur mazu gravu? No vienas puses to jāpārnes gabalos, transportējiet gabalus caur gravu un pārbūvējiet kravas mašīnu no otra gala.

Tas pats notiek, ja nosūta faila pielikumu pa e-pastu. Procesā, kas pazīstams kā kodēšana, bināros datus pārveido par ASCII tekstu, kuru var transportēt pa e-pastu bez problēmām. Saņēmēja beigās dati tiek dekodēti un sākotnējais fails tiek pārbūvēts.

Viena patvaļīgu datu kodēšanas metode kā vienkāršs ASCII teksts ir Base64. Tas ir viens no paņēmieniem, ko izmanto MIME standarts, lai nosūtītu datus, kas nav vienkāršs teksts.

Base64 uz glābšanu

Base64 kodējums aizņem trīs bitus, katrs sastāv no astoņiem bitiem, un attēlo tos kā četras izdrukājamas rakstzīmes ASCII standartā. Tas notiek pēc būtības divos posmos.

Pirmais solis ir pārvērst trīs bitus uz četriem sešiem bitiem. Katrs ASCII standarta raksturs sastāv no septiņiem bitiem. Base64 izmanto tikai 6 bitus (kas atbilst 2 ^ 6 = 64 rakstzīmes), lai nodrošinātu, ka kodēti dati ir izdrukājami un cilvēcīgi lasāmi. Nevienā no īpašajām rakstzīmēm, kas pieejamas ASCII formātā, neizmanto.

64 rakstzīmes (tātad nosaukums Base64) ir 10 cipari, 26 mazie rakstzīmes, 26 lielie burti, kā arī "+" un "/".

Ja, piemēram, trīs baiti ir 155, 162 un 233, atbilstošā (un biedējošā) bitu plūsma ir 100110111010001011101001, kas savukārt atbilst 6 bitu vērtībām 38, 58, 11 un 41.

Otrajā solī šie skaitļi tiek pārvērsti par ASCII rakstzīmēm, izmantojot Base64 kodēšanas tabulu. Mūsu piemēra 6 bitu vērtības pārveido ASCII secību "m6Lp".

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

Šis divpakāpju process tiek piemērots visai kodēto baitu secībai. Lai nodrošinātu, ka kodētos datus var pareizi drukāt un tas nepārsniedz nevienu pasta servera līnijas garuma ierobežojumu, jaunās rakstzīmes tiek ievietotas, lai līniju garumi nepārsniegtu 76 rakstzīmes. Jaunas līnijas rakstzīmes tiek kodētas tāpat kā citi dati.

Endgame risināšana

Kodēšanas procesa beigās var rasties problēma. Ja sākotnējo datu izmērs baitos ir trīs reizes, viss darbojas labi. Ja tā nav, mēs varam nonākt ar vienu vai diviem 8 bitu baitiem. Lai pareizi kodētu, mums tomēr vajadzīgi tieši trīs baiti.

Risinājums ir pievienot pietiekami daudz baitus ar vērtību "0", lai izveidotu 3 baitu grupu. Divas šādas vērtības tiek pievienotas, ja mums ir viens papildu baits no datiem, viens ir pievienots diviem papildu baitu datiem.

Protams, šīs mākslīgās pēdas "0" nevar kodēt, izmantojot zemāk esošo kodēšanas tabulu. Tiem jābūt pārstāvētiem 65. zīmes.

Base64 pointera rakstzīme ir '='. Protams, tas var parādīties tikai kodēto datu beigās.

Base64 kodēšanas tabula

VērtībaChar VērtībaChar VērtībaChar VērtībaChar
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
8Es 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/