Hvis internett er informasjonen motorveien, er veien for e-post en smal kløft. Bare svært små vogner kan passere.
Transportsystemet med e-post er laget for enkel ASCII-tekst. Å prøve å sende tekst på andre språk eller vilkårlig filer, er som å få en lastebil gjennom kløften.
Hvordan går den store lastebilen gjennom Ravinen?
Så hvordan sender du en stor lastebil gjennom en liten kløft? Du må ta den i stykker i den ene enden, transportere stykkene gjennom kløften, og gjenoppbygg trucken fra stykkene i den andre enden.
Det samme skjer når du sender et filvedlegg via e-post. I en prosess kjent som koding blir den binære data transformert til ASCII-tekst, som kan transporteres i e-post uten problemer. På mottakerens slutt dekodes dataene, og den opprinnelige filen gjenoppbygges.
En metode for koding av vilkårlig data som vanlig ASCII-tekst er Base64. Det er en av teknikkene som brukes av MIME-standarden for å sende data annet enn vanlig tekst.
Base64 til redning
Base64-kodingen tar tre byte, hver bestående av åtte biter, og representerer dem som fire utskrivbare tegn i ASCII-standarden. Det gjør det i hovedsak to trinn.
Det første trinnet er å konvertere tre byte til fire tall på seks biter. Hver karakter i ASCII-standarden består av syv biter. Base64 bruker bare 6 biter (tilsvarende 2 ^ 6 = 64 tegn) for å sikre at kodet data kan skrives ut og være menneskelig lesbar. Ingen av spesialtegnene som er tilgjengelige i ASCII, brukes.
De 64 tegnene (dermed navnet Base64) er 10 siffer, 26 små bokstaver, 26 store bokstaver samt '+' og '/'.
Hvis for eksempel de tre byte er 155, 162 og 233, er tilsvarende (og skremmende) bitstrøm 100110111010001011101001, som igjen tilsvarer 6-bitverdiene 38, 58, 11 og 41.
Disse tallene konverteres til ASCII-tegn i det andre trinnet ved hjelp av Base64-kodingstabellen. 6-bitverdiene i vårt eksempel oversetter til ASCII-sekvensen "m6Lp".
- 155 -> 10011011
- 162 -> 10100010
- 233 -> 11101001
- 100110 -> 38
- 111010 -> 58
- 001011 -> 11
- 101001 -> 41
- 38 -> m
- 58 -> 6
- 11 -> L
- 41 -> s
Denne to-trinns prosessen blir brukt på hele sekvensen av byte som er kodet. For å sikre at kodede dataene kan skrives ut på riktig måte og ikke overskrider en hvilken som helst e-postserver lengdegrense for lim, legges nye linjeskift inn for å holde linjelengder under 76 tegn. Newline-tegnene er kodet som alle andre data.
Løse Endgame
På slutten av kodingsprosessen kan det hende at det oppstår et problem. Hvis størrelsen på de opprinnelige dataene i byte er flere enn tre, virker det bra. Hvis det ikke er det, kan vi ende opp med en eller to 8-bit byte. For riktig koding trenger vi imidlertid nøyaktig tre byte.
Løsningen er å legge til nok byte med en verdi på '0' for å lage en 3-byte gruppe. To slike verdier er vedlagt hvis vi har en ekstra byte med data, en er vedlagt for to ekstra byte.
Selvfølgelig kan disse kunstige etterfølgende 0'ene ikke kodes ved hjelp av kodingstabellen nedenfor. De må være representert av en 65. karakter.
Base64-bokstaven er '='. Det kan naturligvis bare vises på slutten av kodede data.
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 | p | 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 | / |