Base64 хэрхэн ажилладаг вэ?

Хэрэв интернет бол мэдээллийн хурдны зам бол имэйлийн зам бол нарийн жалганд байдаг. Зөвхөн маш жижиг тэрэг өнгөрч болно.

Имэйлийн тээврийн систем нь ердийн ASCII текстээр хийгдсэн байдаг. Бусад хэлээр текст илгээх эсвэл дурын файлуудаар оролдох нь жалганд дамжин ачааны машин авахтай адил юм.

Равинаар том ачааны машин хэрхэн явдаг вэ?

Тэгвэл та жижиг жалга дундуур том ачааны машиныг яаж илгээх вэ? Та нэг талаас нь хэсэг хэсгээр нь авч, жалганы доогуур дамжин хэсгүүдийг ачиж, нөгөө талаасаа ачааны машиныг дахин босгох хэрэгтэй.

Та файлын хавсралтыг имэйлээр явуулахад мөн адил тохиолддог. Кодыг кодчилох гэгддэг процессд ASCII текст рүү шилжих бөгөөд энэ нь ямар ч асуудалгүйгээр имэйлээр тээвэрлэгдэж болно. Хүлээн авагчийн төгсгөлд өгөгдлийг декод хийж, эх файлыг дахин бүтээх болно.

Энгийн ASCII текст шиг дурын өгөгдлийг кодлох нэг арга бол Base64 юм. Энэ нь энгийн MIME стандартад ашиглагддаг техникүүдийн нэг нь энгийн текстээс бусад өгөгдлийг илгээдэг.

Аврах анги Base64

Base64 кодчилол нь гурван байтаас бүрдэх бөгөөд тус бүр нь ASCII стандартад дөрвөн хэвлэгдэх боломжтой тэмдэгтүүдийг төлөөлнө. Энэ нь үндсэндээ хоёр шатанд байдаг.

Эхний алхам нь гурван байтыг хөрвүүлэхэд зургаагаас зургаан бит юм. ASCII стандарт дахь тэмдэгт бүр долоон битээс бүрдэнэ. Base64 нь зөвхөн 6 битийн (2 ^ 6 = 64 тэмдэгттэй тэнцүү) ашигладаг. ASCII-д байдаг тусгай тэмдэгтүүд байхгүй.

64 тэмдэгтүүдээс (учир нь Base64 нэр) 10 оронтой, 26 жижиг үсгүүд, 26 том үсгүүд болон '+' ба '/'.

Жишээ нь, гурван байт нь 155, 162 ба 233 бол харгалзах (ба айлган сүрдүүлэх) бит урсгал нь 100110111010001011101001 бөгөөд энэ нь 6-битийн 38, 58, 11, 41 гэсэн утгуудтай тохирдог.

Эдгээр тоонууд нь Base64 кодчилолын хүснэгтийг ашиглан хоёр дахь алхам дахь ASCII тэмдэгтүүд рүү хувиргадаг. Манай жишээний 6 битийн утгыг ASCII "m6Lp" дарааллаар хөрвүүлнэ.

Энэ хоёр шаттай процесс нь кодлогдсон байтуудын бүх дараалалд ашиглагдана. Кодлогдсон өгөгдлийг зөв хэвлэж чадаж байхын тулд мэйл серверийн мөрийн уртаас хэтрэхгүй байхыг баталгаажуулахын тулд шинэ тэмдэгтүүдийг оруулахын тулд 76 тэмдэгтээс доош урттай мөрийг хадгалахыг хүсч байна. Newline тэмдэгтүүд нь бусад бүх өгөгдлүүдтэй адил кодлогдсон байна.

Endgame-ийг шийдэх

Кодлогын төгсгөлд бид асуудалтай тулгарах болно. Хэрвээ өгөгдөлийн хэмжээ өгөгдлийн хэмжээ гурваас олон байвал бүх зүйл зүгээр ажилладаг. Хэрэв тийм биш бол бид нэг буюу хоёр 8-битийн байттай байж болно. Зөв зөв кодчиллын хувьд бид яг гурван-байт хэрэгтэй.

Энэ шийдэл нь 3 байт бүлгийг үүсгэхэд хангалттай байтыг $ 0-ээр нэмэх явдал юм. Дээрх хоёр өгөгдлүүд нь нэмэлт өгөгдлийн байдалтай байвал эдгээр хоёр утгыг хавсаргав.

Мэдээжийн хэрэг, эдгээр хиймэл тоог '0-ээр кодчилох хүснэгтийг ашиглан кодлох боломжгүй. Тэд 65-р тэмдэгтээр төлөөлөгдөх ёстой.

Base64 дэвсгэр тэмдэгт нь '='. Мэдээжийн хэрэг, энэ нь зөвхөн кодлогдсон мэдээллийн төгсгөлд л гарч ирдэг.

Base64 кодчиллын хүснэгт

Утга Char Утга Char Утга Char Утга Char
0 А 16 Q 32 g 48 w
1 Б 17 R 33 h 49 x
2 C 18 S 34 би 50 y
3 D 19 Т 35 j 51 z
4 Е 20 U 36 k 52 0
5 F 21 V 37 л 53 1
6 G 22 В 38 м 54 2
7 H 23 X 39 n 55 3
8 Би 24 Y 40 o 56 4
9 J 25 Z 41 х 57 5
10 K 26 a 42 q 58 6
11 L 27 б 43 r 59 7
12 М 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 О. 30 д 46 u 62 +
15 P 31 f 47 v 63 /