Hvordan Base64-koding fungerer
Base64-koding er en prosess for å konvertere binære data til et ASCII-strengformat ved å konvertere de binære dataene til en 6-bits tegnrepresentasjon. Base64-metoden for koding brukes når binære data, for eksempel bilder eller video, overføres over systemer som er designet for å overføre data i et rentekstformat (ASCII).
Hvorfor brukes Base64-koding?
Behovet for Base64-koding kommer fra problemene som oppstår når media sendes inn rå binært format til tekstbaserte systemer.
Siden tekstbaserte systemer (som e-post) tolker binære data som et bredt spekter av tegn, inkludert spesielle kommandotegn, mye av de binære dataene som overføres til overføringsmedier blir feiltolket av disse systemene og tapt eller ødelagt i overføringen prosess.

En metode for å kode denne typen binære data på en måte som unngår slike overføringsproblemer er å sende den som ren ASCII-tekst i Base64-kodet format. Dette er en av teknikkene som brukes av MIME-standarden for å sende andre data enn ren tekst.
Mange programmeringsspråk, som PHP og Javascript, inkluderer Base64-kodings- og dekodingsfunksjoner for å tolke data som overføres ved hjelp av Base64-koding.
Base64-kodingslogikk
Base64-koding bryter binære data i 6-bits segmenter på 3 fulle byte og representerer de som utskrivbare tegn i ASCII-standard. Den gjør det i hovedsak i to trinn.
Det første trinnet er å bryte den binære strengen ned i 6-bits blokker. Base64 bruker bare 6 bits (tilsvarende 2^6 = 64 tegn) for å sikre at kodede data er utskrivbare og lesbare av mennesker. Ingen av spesialtegnene som er tilgjengelige i ASCII brukes.
De 64 tegnene (derav navnet Base64) er 10 sifre, 26 små bokstaver, 26 store tegn samt plusstegnet (+) og skråstreken fremover (/). Det er også en 65. karakter kjent som en pute, som er likhetstegnet (=). Dette tegnet brukes når det siste segmentet av binære data ikke inneholder hele 6 biter.
Base64-kodingseksempel
Ta for eksempel tre ASCII-tall 155, 162 og 233. Disse tre tallene utgjør en binær strøm av 100110111010001011101001. En binær fil, som et bilde, inneholder en binær strøm som kjører for titalls eller hundretusenvis av nuller og enere.
En Base64-koder starter med å dele den binære strømmen inn i grupperinger på seks tegn: 100110 111010 001011 101001. Hver av disse grupperingene oversettes til tallene 38, 58, 11 og 41.
En seks-tegns binær strøm konverterer mellom binære (eller base-2) til desimaltegn (base-10) ved å kvadrere hver verdi representert av en 1 i den binære sekvensen med sin posisjonelle kvadrat. Starter fra høyre og flytter til venstre, og starter med null, representerer verdiene i den binære strømmen 2^0, deretter 2^1, så 2^2, så 2^3, så 2^4, så 2^5.
Her er en annen måte å se det på. Fra venstre er hver posisjon verdt 1, 2, 4, 8, 16 og 32. Hvis det binære tallet har en 1 i sporet, legger du til den verdien; hvis den har en 0 i sporet, har du ikke det. Den binære strengen 100110 konverteres til desimaltallet 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-koding tar denne binære strengen og deler den ned i 6-bits verdier 38, 58, 11 og 41.
Til slutt konverteres disse tallene til ASCII-tegn ved hjelp av Base64-kodingstabellen. 6-bits verdiene i dette eksemplet oversettes til ASCII-sekvensen m6Lp.
Bruke Base64-konverteringstabellen:
- 38 er m
- 58 er 6
- 11 er L
- 41 er s
Denne to-trinns prosessen brukes på hele den binære strengen som er kodet.
For å sikre at de kodede dataene kan skrives ut på riktig måte og ikke overskrider noen e-postservers linjelengdegrense, settes nye linjetegn inn for å holde linjelengden under 76 tegn. Nylinjetegnene er kodet som alle andre data.
Hele formålet med Base64-koding, fra å legge til utfylling for å bevare 3-byte binære segmenter til å konvertere binær til tekst ved å bruke Base64-tabellen, er å bevare integriteten til den overførte binæren informasjon.
Base64-kodingstabell
Følgende tabell oversetter alle 64 tegnene som brukes i Base64-koding.
Base64-kodingstabell | |||||||
---|---|---|---|---|---|---|---|
Verdi | Char | Verdi | Char | Verdi | Char | Verdi | Char |
0 | EN | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | Jeg | 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 | Jeg | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | s | 57 | 5 |
10 | K | 26 | en | 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 | / |
Løse sluttspillet
På slutten av kodingsprosessen kan det være et problem. Hvis størrelsen på de opprinnelige dataene i byte er et multiplum av tre, fungerer alt bra. Hvis den ikke er det, kan det være tomme byte. For riktig koding trengs nøyaktig 3-byte med binære data.
Løsningen er å legge til nok byte med en verdi på 0 for å lage en 3-byte gruppe. To slike verdier legges til hvis dataene trenger én ekstra byte med data, én legges til for to ekstra byte.
Selvfølgelig kan disse kunstige etterfølgende '0'ene ikke kodes ved hjelp av kodingstabellen nedenfor. De må representeres av et 65. tegn. Base64-utfyllingstegnet er likhetstegnet (=) og plasseres på slutten av kodede data.