Om internet är informationsvägen, är sökvägen för e-post en smal ravin. Endast mycket små vagnar kan passera.
Transportsystemet för e-post är utformat för enbart ASCII-text. Att försöka skicka text på andra språk eller godtyckliga filer är som att få en lastbil genom ravinen.
Hur går den stora lastbilen genom Ravinen?
Hur skickar du sedan en stor lastbil genom en liten ravin? Du måste ta den i bitar i ena änden, transportera bitarna genom ravinen och bygga om trucken från bitarna i andra änden.
Samma sak händer när du skickar en filbilaga via e-post. I en process som kallas kodning omvandlas den binära data till ASCII-text, som kan transporteras i e-post utan problem. Vid mottagarens slut avkodas data och originalfilen återuppbyggs.
En metod för kodning av godtycklig data som vanlig ASCII-text är Base64. Det är en av de tekniker som används av MIME-standarden för att skicka data annat än vanlig text.
Base64 till räddningstjänsten
Base64-kodning tar tre byte, var och en består av åtta bitar och representerar dem som fyra skrivbara tecken i ASCII-standarden. Det gör det i huvudsak två steg.
Det första steget är att konvertera tre byte till fyra siffror på sex bitar. Varje tecken i ASCII-standarden består av sju bitar. Base64 använder endast 6 bitar (motsvarande 2 ^ 6 = 64 tecken) för att säkerställa att kodad data kan skrivas ut och läsbar. Ingen av de specialtecken som finns i ASCII används.
De 64 tecknen (därav namnet Base64) är 10 siffror, 26 små bokstäver, 26 stora bokstäver samt "+" och "/".
Om exempelvis de tre byte är 155, 162 och 233 motsvarar motsvarande (och skrämmande) bitström 100110111010001011101001, vilket i sin tur motsvarar 6-bitarsvärdena 38, 58, 11 och 41.
Dessa siffror konverteras till ASCII-tecken i det andra steget med hjälp av Base64-kodningstabellen. 6-bitarsvärdena i vårt exempel översätter till ASCII-sekvensen "m6Lp".
- 155 -> 10011011
- 162 -> 10100010
- 233 -> 11101001
- 100110 -> 38
- 111010 -> 58
- 001011 -> 11
- 101001 -> 41
- 38 -> m
- 58 -> 6
- 11 -> L
- 41 -> sid
Denna tvåstegsprocess tillämpas på hela sekvensen av byte som kodas. För att säkerställa att kodade data kan skrivas ut ordentligt och inte överskrider någon gränssnittsgränsen för en postserver, läggs in nya tecken för att hålla linjelängder under 76 tecken. Newline-tecknen kodas som alla andra data.
Lösa slutspelet
I slutet av kodningsprocessen kan det hända att vi stöter på ett problem. Om storleken på de ursprungliga data i byte är en multipel av tre, fungerar det bra. Om det inte är så kan vi sluta med en eller två 8-bitars byte. För korrekt kodning behöver vi dock exakt tre byte.
Lösningen är att lägga till tillräckligt med byte med ett värde på '0' för att skapa en 3-byte-grupp. Två sådana värden läggs till om vi har en extra byte av data, en är bifogad för två extra byte.
Naturligtvis kan dessa artificiella efterföljande 0-koder inte kodas med hjälp av kodningstabellen nedan. De måste representeras av en 65: e tecken.
Base64-vadderingen är '='. Naturligtvis kan det bara visas i slutet av kodade data.
Base64 kodningstabell
Värde | Röding | Värde | Röding | Värde | Röding | Värde | Röding | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | en | 16 | Q | 32 | g | 48 | w | |||
1 | B | 17 | R | 33 | h | 49 | x | |||
2 | C | 18 | S | 34 | jag | 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 | jag | 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 | / |