Hvis internettet er informationsvejen, er stien til e-mail en smal kløft. Kun meget små vogne kan passere.
Transportsystemet med e-mail er designet til almindelig ASCII-tekst. At forsøge at sende tekst på andre sprog eller vilkårlig filer er som at få en lastbil gennem kløften.
Hvordan går den store lastbil gennem Ravinen?
Så hvordan sender du en stor lastbil gennem en lille kløft? Du skal tage den i stykker i den ene ende, transportere stykkerne gennem kløften og genopbygge trucken fra stykkerne i den anden ende.
Det samme sker, når du sender en fil vedhæftning via e-mail. I en proces, der kaldes kodning, transformeres den binære data til ASCII-tekst, som kan transporteres i e-mail uden problemer. På modtagerens ende afkodes dataene, og den oprindelige fil genopbygges.
En metode til kodning af vilkårlig data som almindelig ASCII-tekst er Base64. Det er en af de teknikker, der anvendes af MIME-standarden til at sende andre data end almindelig tekst.
Base64 til undsætning
Base64-kodning tager tre bytes, der hver består af otte bits, og repræsenterer dem som fire udskrivbare tegn i ASCII-standarden. Det gør det i stort set to trin.
Det første skridt er at konvertere tre byte til fire tal på seks bit. Hver karakter i ASCII-standarden består af syv bits. Base64 bruger kun 6 bits (svarende til 2 ^ 6 = 64 tegn) for at sikre, at kodede data kan udskrives og læses menneskeligt. Ingen af specialtegnene, der er tilgængelige i ASCII, anvendes.
De 64 tegn (dermed navnet Base64) er 10 cifre, 26 små bogstaver, 26 store bogstaver samt '+' og '/'.
Hvis for eksempel de tre byte er 155, 162 og 233, svarer den tilsvarende (og skræmmende) bitstrøm 100110111010001011101001, hvilket igen svarer til 6-bit værdierne 38, 58, 11 og 41.
Disse tal konverteres til ASCII-tegn i andet trin ved hjælp af Base64-kodningstabellen. 6-bit værdierne i vores eksempel oversættes 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-trins proces anvendes til hele sekvensen af byte, som er kodet. For at sikre, at de kodede data kan udskrives korrekt og ikke overskrider en hvilken som helst mailserver grænselængde, indsættes nye linjer for at holde linjelængder under 76 tegn. Newline-tegnene er kodet som alle andre data.
Løse Endgame
I slutningen af kodningsprocessen kan vi komme ind i et problem. Hvis størrelsen på de originale data i bytes er et flertal på tre, fungerer det fint. Hvis det ikke er tilfældet, kan vi ende med en eller to 8-bit byte. For korrekt kodning har vi dog brug for præcis tre bytes.
Løsningen er at tilføje nok byte med en værdi på '0' for at oprette en 3-byte gruppe. To sådanne værdier er tilføjet, hvis vi har en ekstra byte af data, en er vedlagt for to ekstra bytes.
Selvfølgelig kan disse kunstige efterfølgende '0'er ikke kodes ved hjælp af kodningstabellen nedenfor. De skal være repræsenteret af en 65. karakter.
Base64-polstringstegnet er '='. Det kan naturligvis kun vises i slutningen af kodede data.
Base64 kodningstabel
Værdi | char | Værdi | char | Værdi | char | Værdi | 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 | / |