Base64

Från Täpp-Anders
Version från den 24 februari 2013 kl. 13.41 av Anders (diskussion | bidrag) (→‎Effektiviteten)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Denna sida är under konstruktion och ej färdig ännu och därför kan väsentliga detaljer fortfarande saknas.

Bakgrund

Tidigare system använde Unix-to-Unix Encoding (UUE) för att koda information på ett sätt att det gick att skicka genom en 7 bitars överföringskanal. Detta system är sedan länge övergivet i moderna datorsystem och i stället använder man Base64 som är en mer effektiv metod.

I korthet går det ut på att man tar in den data som skall kodas, delar upp det i symboler om 6 bitar och därefter kodar dem enligt Standardtabellen eller någon annan variant. Standardtabellen skall användas för all extern kommunikation eftersom det annars blir inkompatibelt mellan sändare och mottagare.

Procedur

Indatat ses som en ström oktetter. Dessa grupperas om 3, dvs i 24 bitar och delas sedan i 6-bitarstal så att det blir 4 stycken 6-bitarsgrupper. Varje sexbitarsgrupp har då ett värde som svarar mot en kod i tabellen och denna kod skickas i stället för 6-bitsgruppen. Om den sista gruppen inte är 3 bytes utan 2 eller 1 motsvarar det bara 2-3 siffror i Base64.

Base64 har fått sitt namn från att 26=64, nämligen antalet symboler i listan som kan skickas.

Kodningen är baserad på följande:

  • A-Z motsvarar 0-25
  • a-z motsvarar 26-51
  • 0-9 motsvarar 52-61
  • '+' eller '-' motsvarar 62
  • '/' eller '_' motsvarar 63

Anledningen till de två sista är ekvivalenta är för att det ibland kan vara så att vissa system använder endera som signaleringstecken eller liknande och då är det bättre att koda med det andra tecknet i stället. Man måste dock acceptera alla varianter som mottagare men kan välja hur man kodar som sändare. Observera att man EJ bör byta tecken inom samma block.

Effektiviteten

Effektiviteten av kodningen är 3/4. Det betyder att för 24 bitar in produceras 32 bitar ut och det innebär att man därmed får en effektivitetssiffra på 0,75 vilket är ganska bra. Det är precis samma som för UUENCODE.

Standardtabellen

Värde Siffra   Värde Siffra   Värde Siffra   Värde Siffra
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:

Text 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