Base64 kodējums ir bināro datu konvertēšanas process ASCII virknes formātā, pārvēršot šos bināros datus 6 bitu rakstzīmju attēlojumā. Base64 kodēšanas metode 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 datu nesēju neapstrādātā binārā formātā uz teksta sistēmām.
Tā kā teksta sistēmas (piemēram, e-pasts) interpretē 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īti datu nesēju pārsūtīšanai, šīs sistēmas nepareizi interpretē, un tie tiek pazaudēti vai bojāti. pārraides process.
Viena metode šā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ā divās darbībās.
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 formātā pieejamajām speciālajā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ā pad, 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 skaitļus 155, 162 un 233. Šie trīs skaitļi veido bināro straumi 100110111010001011101001. Binārais fails, tāpat kā attēls, satur bināro straumi, kas darbojas desmitiem vai simtiem tūkstošu. un vieni.
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ārvērš no binārajām (vai 2. bāzes) rakstzīmēm decimāldaļās (10. bāzes) rakstzīmes, katru vērtību, kas binārajā secībā attēlo 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ē ir 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. Ja binārajam skaitlim 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: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^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 p
Šis divpakāpju process tiek lietots visai binārajai virknei, kas ir kodēta.
Lai nodrošinātu, ka kodētos datus var pareizi izdrukāt un tie nepārsniedz neviena 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 rindiņas 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 konvertēšanai tekstā, izmantojot Base64 tabulu, ir saglabāt pārsūtītās binārās informācijas integritāti.
Base64 kodēšanas tabula
Šajā tabulā ir tulkotas visas 64 rakstzīmes, kas 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 | 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 | 55 | 3 | ||||
8 | I | 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 | / |
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.