Base64-enkodering is 'n proses om binêre data na 'n ASCII-stringformaat om te skakel deur daardie binêre data in 'n 6-bis-karaktervoorstelling om te skakel. Die Base64-metode van enkodering word gebruik wanneer binêre data, soos beelde of video, oor stelsels oorgedra word wat ontwerp is om data in 'n gewone teks (ASCII) formaat oor te dra.
Waarom word Base64-enkodering gebruik?
Die behoefte aan Base64-kodering kom van die probleme wat voorkom wanneer media in rou binêre formaat na teksgebaseerde stelsels versend word.
Aangesien teksgebaseerde stelsels (soos e-pos) binêre data as 'n wye reeks karakters interpreteer, insluitend spesiale opdragkarakters, word baie van die binêre data wat na oordragmedia oorgedra word, verkeerd geïnterpreteer deur daardie stelsels en verlore of beskadig in die oordragproses.
Een metode om hierdie soort binêre data te enkodeer op 'n manier wat sulke oordragprobleme vermy, is om dit as gewone ASCII-teks in Base64-gekodeerde formaat te stuur. Dit is een van die tegnieke wat deur die MIME-standaard gebruik word om data anders as gewone teks te stuur.
Baie programmeertale, soos PHP en Javascript, sluit Base64-enkodering- en -dekoderingsfunksies in om data te interpreteer wat met Base64-kodering versend is.
Base64-enkoderingslogika
Base64-kodering breek binêre data in 6-bis segmente van 3 volle grepe en verteenwoordig dié as drukbare karakters in ASCII-standaard. Dit doen dit in wese twee stappe.
Die eerste stap is om die binêre string in 6-bis blokke af te breek. Base64 gebruik slegs 6 bisse (wat ooreenstem met 2^6=64 karakters) om te verseker dat geënkodeerde data drukbaar en menslik leesbaar is. Geen van die spesiale karakters wat in ASCII beskikbaar is, word gebruik nie.
Die 64 karakters (vandaar die naam Base64) is 10 syfers, 26 kleinletters, 26 hoofletters sowel as die Plus-teken (+) en die Voorwaartse skuinsstreep (/). Daar is ook 'n 65ste karakter bekend as 'n pad, wat die Gelyke teken (=) is. Hierdie karakter word gebruik wanneer die laaste segment van binêre data nie 'n volle 6 bisse bevat nie.
Base64-enkoderingsvoorbeeld
Neem byvoorbeeld drie ASCII-nommers 155, 162 en 233. Hierdie drie getalle vorm 'n binêre stroom van 1001101110100010111101001. 'n Binêre lêer, soos 'n prent, bevat 'n binêre stroom wat vir tiene of honderdduisende nulle loop en ene.
'n Base64-enkodeerder begin deur die binêre stroom in groeperings van ses karakters te verdeel: 100110 111010 001011 101001. Elkeen van hierdie groeperings vertaal in die nommers 38, 58, 11 en 41.
'n Binêre stroom van ses karakters skakel om tussen binêre (of basis-2) na desimale (basis-10) karakters deur elke waarde wat verteenwoordig word deur 'n 1 in die binêre ry met sy posisionele vierkant te kwadraat. Begin van regs en beweeg links, en begin met nul, die waardes in die binêre stroom verteenwoordig 2^0, dan 2^1, dan 2^2, dan 2^3, dan 2^4, dan 2^5.
Hier is nog 'n manier om daarna te kyk. Begin van links is elke posisie 1, 2, 4, 8, 16 en 32 werd. As die binêre getal 'n 1 in die gleuf het, voeg jy daardie waarde by; as dit 'n 0 in die gleuf het, het jy dit nie. Die binêre string 100110 skakel om na die desimale getal 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.
Base64-kodering neem hierdie binêre string en breek dit af in die 6-bis-waardes 38, 58, 11 en 41.
Laastens word hierdie nommers omgeskakel na ASCII-karakters deur die Base64-enkoderingstabel te gebruik. Die 6-bis waardes van hierdie voorbeeld vertaal na die ASCII-reeks m6Lp.
Gebruik die Base64-omskakelingstabel:
- 38 is m
- 58 is 6
- 11 is L
- 41 is p
Hierdie tweestap-proses word toegepas op die hele binêre string wat geënkodeer is.
Om te verseker dat die geënkodeerde data behoorlik gedruk kan word en nie enige posbediener se lynlengtelimiet oorskry nie, word nuwelynkarakters ingevoeg om reëllengtes onder 76 karakters te hou. Die nuwelynkarakters is geënkodeer soos alle ander data.
Die hele doel van Base64-kodering, van die byvoeging van opvulling om 3-grepe binêre segmente te bewaar tot die omskakeling van binêre na teks deur die Base64-tabel te gebruik, is om die integriteit van die oorgedra binêre inligting te bewaar.
Base64-enkoderingtabel
Die volgende tabel vertaal al 64 karakters wat in Base64-kodering gebruik word.
Base64-enkoderingtabel | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Waarde | Char | Waarde | Char | Waarde | Char | Waarde | 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 | / |
Oplos die eindspel
Aan die einde van die enkoderingsproses kan daar 'n probleem wees. As die grootte van die oorspronklike data in grepe 'n veelvoud van drie is, werk alles goed. As dit nie is nie, kan daar leë grepe wees. Vir behoorlike enkodering is presies 3-grepe se binêre data nodig.
Die oplossing is om genoeg grepe met 'n waarde van 0 by te voeg om 'n 3-grepe-groep te skep. Twee sulke waardes word bygevoeg as die data een ekstra greep data benodig, een word bygevoeg vir twee ekstra grepe.
Natuurlik kan hierdie kunsmatige agterste '0'e nie geënkodeer word deur die enkoderingstabel hieronder te gebruik nie. Hulle moet deur 'n 65ste karakter verteenwoordig word. Die Base64-vulkarakter is die Gelykteken (=) en word aan die einde van geënkodeerde data geplaas.