Base64

Från Wikipedia
Version från den 9 november 2017 kl. 04.10 av NirmosBot2 (Diskussion | Bidrag) (Ersätter magiska RFC-länkar med explicita länkar.)

Base64 är en metod som används för att koda binär data till skrivbara 7-bitars ASCII-tecken, för distribution via till exempel E-post. Kodningen baseras på ett talsystem med 64 som bas, till skillnad från det decimala talsystemet där basen är 10 och det binära talsystemet där basen är 2. Base64 används bland annat när man har bilagor i e-post, enligt systemet MIME. Även i internetsökvägar (URL) till vissa sajter, exempelvis URL-förkortare.

Informationen som skall kodas tolkas som en ström av oktetter eller bytes, det vill säga dataenheter om 8 bitar. Dessa delas in i grupper på tre bytes, alltså vardera med 24 bitar. Grupperna kodas genom att varje grupp delas i fyra delar, som då består av 6 bitar, vilket motsvarar en siffra med basen 64 (26=64). Detta motsvarar ungefär det antal tecken som kan överföras över alla tänkbara e-postservrar utan risk för förvanskning (till exempel blankslag och radbyten kan i vissa fall tillkomma eller försvinna). Om den sista gruppen inte har 3 bytes/24 bitar utan 1 eller 2 bytes så motsvarar det bara 2 eller 3 base64-siffror istället för de vanliga 4.

Base64 använder i tur och ordning ASCII-tecknen A–Z (för nr 0-25), a–z (26-51), 0–9 (52-61) och två ytterligare tecken för att koda all information.   I RFC1421[1] eller RFC 2045 (som används för MIME, e-post) används tecknen "+" och "/" som de två sista tecknen och dessa bör enligt RFC3548 användas då annat inte anges. För URL:er och filnamn finns en variant, "Base 64 Encoding with URL and Filename Safe Alphabet" där de två sista är "-" och "_", eftersom "+" och "/" i det sammanhanget kan vara reserverade tecken. Fler varianter finns. Tecknet "=" har en speciell funktion som påfyllnadssymbol och används om den okodade informationen inte är i jämna multiplar om tre bytes, varvid en "=" läggs till slutet på den kodade texten för varje saknad byte. Detta görs inte i alla användningar av Base64 och är inte nödvändigt för att återskapa innehållet (antalet "=" att fylla på är så många som behövs för att få antal Base64-tecken att bli jämnt delbart med 4). Radbyten läggs in enligt behov. I MIME får resultatet av base64-kodningen inte ha rader längre än 76 tecken.

Värde Tecken   Värde Tecken   Värde Tecken   Värde Tecken
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 n 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 / _

Exempel:

Tecken M a n
ASCII-värden 77 97 110
Bitmönster 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Värde per 6 bitar 19 22 5 46
Base64-kodat T W F u

Som exemplet visar, kodar Base64 tre bytes till fyra base64-siffror.

Base64 beskrevs 1987 i RFC989[2] som del av privacy-enhanced mail, e-post med skydd mot otillåten läsning. Base64 beskrivs (tillsammans med Base32 och Base16) i detalj i RFC3548[3]

Kodningen har vissa säkerhetsaspekter:

  • Om extra tecken såsom mellanslag och blankslag tillåts och ignoreras kan extra information smugglas med en Base64-kodad fil.
  • Extra tecken kan leda till buffertöverskridning eller andra problem i slarvigt skrivna tillämpningar.
  • Då lösenord kodas med Base64, till exempel i www-kakor, eller webbadresser, ser användaren inte att det är frågan om lösenord och kan hantera dessa oförsiktigt, till exempel publicera en webbadress där det egna lösenordet ingår.

Källor

  1. ^ RFC 1421 - Privacy Enhancement for Internet Electronic Mail
  2. ^ RFC 989 - Privacy enhancement for Internet electronic mail
  3. ^ RFC 3548 - The Base16, Base32, and Base64 Data Encodings

Se även

  • MIME, standarden som möjliggör bilagor i modern e-post. Base64 används där bl.a. för bilagor i binärform.