Kā darbojas Base64 kodējums
Base64 kodējums ir bināro datu pārveidošanas process ASCII virknes formātā, pārvēršot šos bināros datus 6 bitu rakstzīmju attēlojumā. Kodēšanas metode Base64 tiek izmantota, ja bināri dati, piemēram, attēli vai video, tiek pārsūtīti pa sistēmām, kas paredzētas datu pārsūtīšanai vienkārša teksta (ASCII) formātā.
Kāpēc tiek izmantots Base64 kodējums?
Nepieciešamība pēc Base64 kodēšanas izriet no problēmām, kas rodas, pārsūtot multividi neapstrādāts binārais formāts uz teksta sistēmām.
Tā kā uz tekstu balstītas sistēmas (piemēram, e-pasts) interpretēt bināros datus kā plašu rakstzīmju klāstu, tostarp speciālās komandu rakstzīmes, lielu daļu bināro datu kas tiek pārsūtīts uz pārsūtīšanas datu nesēju, tiek nepareizi interpretēts šajās sistēmās un tiek pazaudēts vai bojāts pārraides laikā process.

Viena no metodēm šāda veida bināro datu kodēšanai, lai izvairītos no šādām pārraides problēmām, ir nosūtīt tos kā vienkāršu ASCII tekstu Base64 kodētā formātā. Šī ir viena no metodēm, ko izmanto MIME standarts, lai nosūtītu datus, kas nav vienkāršs teksts.
Daudzas programmēšanas valodas, piemēram, PHP un Javascript, ietver Base64 kodēšanas un dekodēšanas funkcijas, lai interpretētu datus, kas pārsūtīti, izmantojot Base64 kodējumu.
Base64 kodēšanas loģika
Base64 kodējums sadala bināros datus 6 bitu segmentos ar 3 pilniem baitiem un attēlo tos kā drukājamas rakstzīmes ASCII standartā. Tas tiek darīts būtībā divos posmos.
Pirmais solis ir sadalīt bināro virkni 6 bitu blokos. Base64 izmanto tikai 6 bitus (kas atbilst 2^6 = 64 rakstzīmēm), lai nodrošinātu, ka kodētie dati ir drukājami un cilvēka lasāmi. Netiek izmantota neviena no ASCII pieejamajām īpašajām rakstzīmēm.
64 rakstzīmes (tātad nosaukums Base64) ir 10 cipari, 26 mazie burti, 26 lielie burti, kā arī pluszīme (+) un slīpsvītra (/). Ir arī 65. rakstzīme, kas pazīstama kā a pakete, kas ir vienādības zīme (=). Šo rakstzīmi izmanto, ja bināro datu pēdējā segmentā nav pilni 6 biti.
Base64 kodēšanas piemērs
Piemēram, ņemiet trīs ASCII numurus 155, 162 un 233. Šie trīs skaitļi veido bināro plūsmu 100110111010001011101001. Binārais fails, tāpat kā attēls, satur bināru straumi, kas darbojas ar desmitiem vai simtiem tūkstošu nullēm un vieniniekiem.
Base64 kodētājs sākas, sadalot bināro straumi sešu rakstzīmju grupās: 100110 111010 001011 101001. Katra no šīm grupām nozīmē skaitļus 38, 58, 11 un 41.
Sešu rakstzīmju binārā straume pārveido no binārajām (vai 2. bāzes) rakstzīmēm decimāldaļās (10 bāzes), katru vērtību, kas binārajā secībā apzīmē ar 1, kvadrātā ar tās pozīcijas kvadrātu. Sākot no labās puses un virzoties pa kreisi un sākot ar nulli, vērtības binārajā straumē attēlo 2^0, tad 2^1, tad 2^2, tad 2^3, tad 2^4, tad 2^5.
Šeit ir vēl viens veids, kā to aplūkot. Sākot no kreisās puses, katra pozīcija ir 1, 2, 4, 8, 16 un 32 vērtībā. Ja binārā skaitļa slotā ir 1, jūs pievienojat šo vērtību; ja tā slotā ir 0, jums tā nav. Binārā virkne 100110 tiek pārveidota par decimālo skaitli 38: 0*2^01 + 1*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 = 0+2 +4+0+0+32.
Base64 kodējums ņem šo bināro virkni un sadala to 6 bitu vērtībās 38, 58, 11 un 41.
Visbeidzot, šie skaitļi tiek pārveidoti par ASCII rakstzīmēm, izmantojot Base64 kodēšanas tabulu. Šī piemēra 6 bitu vērtības pārvēršas ASCII secībā m6Lp.
Izmantojot Base64 konversijas tabulu:
- 38 ir m
- 58 ir 6
- 11 ir L
- 41 ir lpp
Šis divpakāpju process tiek piemērots visai kodētajai binārajai virknei.
Lai nodrošinātu, ka kodētos datus var pareizi izdrukāt un tie nepārsniedz pasta servera rindiņas garuma ierobežojumu, tiek ievietotas jaunas rindiņas rakstzīmes, lai rindiņas garums būtu mazāks par 76 rakstzīmēm. Jaunās rindas rakstzīmes tiek kodētas tāpat kā visi citi dati.
Viss Base64 kodēšanas mērķis, sākot no polsterējuma pievienošanas, lai saglabātu 3 baitu bināros segmentus līdz bināra pārvēršana tekstā, izmantojot tabulu Base64, ir saglabāt pārraidītās binārā faila integritāti informāciju.
Base64 kodēšanas tabula
Šajā tabulā ir tulkotas visas 64 rakstzīmes, kas tiek izmantotas Base64 kodējumā.
Base64 kodēšanas tabula | |||||||
---|---|---|---|---|---|---|---|
Vērtība | Char | Vērtība | Char | Vērtība | Char | Vērtība | Char |
0 | A | 16 | J | 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 | es | 24 | Y | 40 | o | 56 | 4 |
9 | Dž | 25 | Z | 41 | lpp | 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 | / |
Beigu spēles atrisināšana
Kodēšanas procesa beigās var rasties problēma. Ja sākotnējo datu lielums baitos ir reizināts ar trīs, viss darbojas labi. Ja tā nav, var būt tukši baiti. Pareizai kodēšanai ir nepieciešami tieši 3 baiti bināro datu.
Risinājums ir pievienot pietiekami daudz baitu ar vērtību 0, lai izveidotu 3 baitu grupu. Divas šādas vērtības tiek pievienotas, ja datiem ir nepieciešams viens papildu datu baits, viens tiek pievienots diviem papildu baitiem.
Protams, šīs mākslīgās beigu '0' nevar kodēt, izmantojot tālāk norādīto kodēšanas tabulu. Tie ir jāattēlo ar 65. rakstzīmi. Base64 pildījuma rakstzīme ir vienādības zīme (=) un tiek ievietota kodēto datu beigās.