Sut mae Gwaith Amgodio Base64

Os yw'r rhyngrwyd yn briffordd yr wybodaeth, yna mae'r llwybr ar gyfer e-bost yn gaefan gul. Dim ond cartiau bach iawn y gallant eu pasio.

Mae'r system drafnidiaeth o e-bost wedi'i gynllunio ar gyfer testun ASCII plaen yn unig. Mae ceisio anfon negeseuon testun mewn ieithoedd eraill neu ffeiliau mympwyol fel mynd â lori drwy'r gadwyn.

Sut mae'r Big Truck yn mynd trwy'r Ravine?

Yna, sut yr ydych chi'n anfon tryc fawr trwy girthfa fach? Rhaid i chi ei dynnu i ddarnau ar yr un pen, cludo'r darnau drwy'r llwyn, ac ailadeiladu'r lori o'r darnau ar y pen arall.

Mae'r un peth yn digwydd pan fyddwch yn anfon atodiad ffeil trwy e-bost . Mewn proses a elwir yn amgodio'r data deuaidd yn cael ei drawsnewid i destun ASCII, y gellir ei gludo mewn e-bost heb broblemau. Ar ddiwedd y derbynnydd, mae'r data wedi'i ddadgodio ac mae'r ffeil wreiddiol yn cael ei hailadeiladu.

Un dull o amgodio data mympwyol fel testun ASCII syml yw Base64. Mae'n un o'r technegau a ddefnyddir gan y safon MIME i anfon data heblaw testun plaen .

Base64 i'r Achub

Mae amgodio Base64 yn cymryd tair bytes, pob un sy'n cynnwys wyth darnau, ac yn eu cynrychioli fel pedair cymeriad argraffadwy yn y safon ASCII. Mae'n gwneud hynny mewn dwy gam yn y bôn.

Y cam cyntaf yw trosi tri bytes i bedair rhif o chwe rhan. Mae pob cymeriad yn y safon ASCII yn cynnwys saith darnau. Dim ond 6 bit sy'n defnyddio Base64 (sy'n cyfateb i 2 ^ 6 = 64 o gymeriadau) i sicrhau bod data amgodedig yn cael ei argraffu a'i ddarllen yn ddynol. Ni ddefnyddir unrhyw un o'r cymeriadau arbennig sydd ar gael yn ASCII.

Y 64 o gymeriadau (felly yr enw Base64) yw 10 digid, 26 o gymeriadau isaf, 26 o gymeriadau uchaf yn ogystal â '+' a '/'.

Os, er enghraifft, y tri bytes yw 155, 162 a 233, y ffrwd cyfatebol (a brawychus) yw 100110111010001011101001, sy'n ei dro yn cyfateb i'r gwerthoedd 6-bit 38, 58, 11 a 41.

Mae'r niferoedd hyn yn cael eu trosi i gymeriadau ASCII yn yr ail gam gan ddefnyddio tabl amgodio Base64. Mae gwerthoedd 6-bit ein hagwedd yn cyfieithu i'r dilyniant ASCII "m6Lp".

Mae'r broses dau gam hwn yn cael ei gymhwyso i gyfres gyfan y bytes sy'n cael eu hamgodio. Er mwyn sicrhau bod y data amgodedig yn cael ei argraffu yn gywir ac nad yw'n fwy na therfyn hyd llinell unrhyw weinydd bost, caiff cymeriadau newydd eu mewnosod i gadw hyd llinellnau o dan 76 o gymeriadau. Mae'r cymeriadau newydd newydd wedi'u hamgodio fel pob data arall.

Datrys y Endgame

Ar ddiwedd y broses amgodio, fe allem ni fod yn broblem. Os yw maint y data gwreiddiol yn bytes yn lluosog o dri, mae popeth yn gweithio'n iawn. Os nad ydyw, efallai y byddwn ni'n dal i fyny gydag un neu ddau bytes 8-bit. Er mwyn amgodio'n briodol, fodd bynnag, mae arnom angen dim ond tri bytes.

Yr ateb yw atodi digon o bytes gyda gwerth '0' i greu grŵp 3-byte. Mae dau wert o'r fath ynghlwm os oes gennym un byte ddata ychwanegol, mae un wedi'i atodi am ddau bytes ychwanegol.

Wrth gwrs, ni ellir amgodio '0' trawst artiffisial hyn gan ddefnyddio'r bwrdd amgodio isod. Rhaid iddynt gael eu cynrychioli gan 65 o gymeriad.

Cymeriad padio Base64 yw '='. Yn naturiol, dim ond ar ddiwedd y data amgodedig y gall ymddangos erioed.

Tabl Amgodio Base64

Gwerth Char Gwerth Char Gwerth Char Gwerth 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 Fi 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 /