Եթե ինտերնետը տեղեկատվական մայրուղին է, ապա էլփոստի ուղին նեղ կիրճ է: Միայն շատ փոքր սայլեր կարող են անցնել:
Էլեկտրոնային փոստի տրանսպորտային համակարգը նախատեսված է միայն ASCII տեքստի համար: Փորձելով տեքստը ուղարկել այլ լեզուներով կամ կամայական ֆայլերի նման է բեռնատար ստանալու ձոր.
Ինչպես է մեծ բեռնատարը շրջվում Ravine- ի միջոցով:
Այնուհետեւ, ինչպես եք մի մեծ բեռնատար մի փոքր ցեխի միջոցով: Դուք պետք է վերցնեք այն մի կտորով, կտորներ տեղափոխեք կիրճով եւ վերակառուցեք բեռնատարը մյուս մասի կտորներից:
Նույնը տեղի է ունենում, երբ էլփոստով կցեք ֆայլի հավելված : Երկուական տվյալների կոդավորումով հայտնի գործընթացում վերափոխվում է ASCII տեքստը, որը կարող է տեղափոխվել առանց էլեկտրոնային փոստով: Ստացողի վերջում տվյալները վերծանվում են եւ սկզբնական ֆայլը վերակառուցվում է:
Բացառիկ տվյալների կոդավորման մեկ եղանակ, որպես պարզ ASCII տեքստ, Base64 է: Այն MIME ստանդարտի կողմից կիրառված մեթոդներից մեկն է `ուղարկելու համար այլ տվյալներ, քան պարզ տեքստը :
Base64- ը փրկարարին
Base64 կոդավորումը տեւում է երեք բայթ, որոնցից յուրաքանչյուրը բաղկացած է ութ բիթից եւ ներկայացնում է դրանք որպես տպագիր բնույթի 4 նիշ ASCII ստանդարտում: Դա դա էականորեն երկու քայլ է:
Առաջին քայլը փոխել է երեք բայթը չորս թվով վեց բիթ: ASCII ստանդարտի յուրաքանչյուր բնույթը բաղկացած է յոթ բիթից: Base64- ը միայն 6 բիթ է օգտագործում (համապատասխան 2 ^ 6 = 64 նիշ), որպեսզի կոդավորված տվյալները տպագրվեն եւ մարդկայինորեն ընթանան: ASCII- ում առկա հատուկ նշաններից ոչ մեկը չի օգտագործվում:
64 նիշ (այսինքն Base64 անունը) 10 նիշ է, 26 փոքրատառ նիշ, 26 մեծ տառատեսակ, ինչպես նաեւ '+' եւ '/':
Եթե, օրինակ, երեք բայդը 155, 162 եւ 233 է, համապատասխան (եւ վախեցնող) բիտի հոսքը 100110111010001011101001 է, որն իր հերթին համապատասխանում է 6-բիթանոց արժեքներին 38, 58, 11 եւ 41:
Այս թվերը փոխարկվում են ASCII նիշերի երկրորդ քայլին, օգտագործելով Base64 կոդավորման աղյուսակը: Մեր օրինակի 6-բիթանոց արժեքները թարգմանվում են ASCII հաջորդականության «m6Lp»:
- 155 -> 10011011
- 162 -> 10100010
- 233 -> 11101001
- 100110 -> 38
- 111010 -> 58
- 001011 -> 11
- 101001 -> 41
- 38 -> m
- 58 -> 6
- 11 -> Լ
- 41 -> p
Այս երկաստիճան գործընթացը կիրառվում է կոդավորված բայթի ամբողջ հաջորդականության վրա: Կոդավորված տվյալների ապահովման համար կարող է պատշաճ կերպով տպագրվել եւ չի գերազանցում որեւէ փոստի սերվերի գծի երկարության սահմանաչափը, նոր գծի նիշերը տեղադրվում են տողերի երկարությունը 76 նիշից ցածր պահելու համար: Նոր գծի նիշերը կոդավորված են, ինչպես բոլոր այլ տվյալները:
Լուծել Endgame- ը
Կոդավորման գործընթացի վերջում մենք կարող ենք խնդիր առաջանալ: Եթե սկզբնական տվյալների չափը բայթում է երեքի բազմապատիկ, ամեն ինչ լավ է: Եթե դա չլինի, մենք կարող ենք ավարտել մեկ կամ երկու 8 բիթանոց բայթ: Համապատասխան կոդավորման համար մեզ անհրաժեշտ է երեք բայթ:
Խնդիրն այն է, ավելացնել '0' արժեք ունեցող բավարար բայթ, 3 բայթ խումբ ստեղծելու համար: Երկու նման արժեքներ ավելացվում են, եթե մենք ունենք մեկ լրացուցիչ բայտ տվյալներ, մեկը ավելացված է երկու լրացուցիչ բայթերի համար:
Իհարկե, այս արհեստական արգելակումը չի կարող կոդավորվել ստորեւ բերված կոդերի աղյուսակով: Նրանք պետք է ներկայացվեն 65-րդ բնույթով:
Base64- ի լրտեսման բնույթը '=' է: Բնականաբար, այն կարող է միայն երբեւէ հայտնվել կոդավորված տվյալների վերջում:
Base64 կոդավորման աղյուսակ
Արժեքը | Char | Արժեքը | Char | Արժեքը | Char | Արժեքը | Char |
---|---|---|---|---|---|---|---|
0 | Ա | 16 | Գ | 32 | գ | 48 | w |
1 | Բ | 17 | Ռ | 33 | h | 49 | x |
2 | C | 18 | Ս | 34 | i | 50 | y |
3 | Դ | 19 | Տ | 35 | ժ | 51 | z |
4 | Ե | 20 | U | 36 | k | 52 | 0 |
5 | Ֆ | 21 | Վ | 37 | լ | 53 | 1 |
6 | Գ | 22 | Վ | 38 | մ | 54 | 2 |
7 | Հ | 23 | X | 39 | n | 55 | 3 |
8 | Ես | 24 | Յ | 40 | o | 56 | 4 |
9 | Ջ | 25 | Զ | 41 | p | 57 | 5 |
10 | Կ | 26 | ա | 42 | q | 58 | 6 |
11 | Լ | 27 | բ | 43 | r | 59 | 7 |
12 | Մ | 28 | գ | 44 | բ | 60 | 8 |
13 | Ն | 29 | դ | 45 | տ | 61 | 9 |
14 | O | 30 | ե | 46 | u | 62 | + |
15 | Պ | 31 | f | 47 | v | 63 | / |