Skip to content

Hur Base64-kodning fungerar

7 de juli de 2021
GettyImages 1134691885 57fb324e5c2848dabfaffa98894329d1

Base64-kodning är en process för att konvertera binär data till ett ASCII-strängformat genom att konvertera den binära data till en 6-bitars teckenrepresentation. Base64-metoden för kodning används när binär data, till exempel bilder eller video, överförs över system som är utformade för att överföra data i ASCII-format (plain-text).

 

Varför används Base64-kodning?

Behovet av Base64-kodning kommer från de problem som uppstår när media överförs i rå binärt format till textbaserade system. Eftersom textbaserade system (som e-post) tolkar binär data som ett brett spektrum av tecken, inklusive specialkommandotecken, tolkas mycket av binär data som överförs till överföringsmedia av dessa system och förloras eller skadas i överföringsprocessen.

En metod för att koda denna typ av binär data på ett sätt som undviker sådana överföringsproblem är att skicka den som vanlig ASCII-text i Base64-kodat format. Detta är en av de tekniker som används av MIME-standarden för att skicka data annan än vanlig text. Många programmeringsspråk, såsom PHP och Javascript, inkluderar Base64-kodnings- och avkodningsfunktioner för att tolka data som överförs med Base64-kodning.

 

Base64-kodningslogik

Base64-kodning bryter binär data i 6-bitarsegment med 3 hela byte och representerar dem som utskrivbara tecken i ASCII-standard. Det gör det i huvudsak två steg. Det första steget är att bryta ner den binära strängen i 6-bitarsblock. Base64 använder bara 6 bitar (motsvarande 2 ^ 6 = 64 tecken) för att säkerställa att kodad data kan skrivas ut och läsas av människor. Ingen av de specialtecken som finns tillgängliga i ASCII används. De 64 tecknen (därav namnet Base64) består av 10 siffror, 26 gemener, 26 stora bokstäver samt plustecknet (+) och Forward Slash (/). Det finns också en 65: e karaktär som kallas a vaddera, vilket är likhetstecknet (=). Detta tecken används när det sista segmentet med binär data inte innehåller hela 6 bitar.

 

Base64-kodningsexempel

Ta till exempel tre ASCII-nummer 155, 162 och 233. Dessa tre siffror utgör en binär ström av 100110111010001011101001. En binär fil, som en bild, innehåller en binär ström som går i tiotals eller hundratusentals nollor och enor. En Base64-kodare börjar med att klumpa ihop den binära strömmen i grupperingar av sex tecken: 100110 111010 001011 101001. Var och en av dessa grupperingar översätts till siffrorna 38, 58, 11 och 41. En binär ström med sex tecken konverterar mellan binär (eller bas- 2) till decimaltecken (bas-10) genom att kvadrera varje värde som representeras av en 1 i den binära sekvensen med dess positionstorg. Börjar från höger och flyttar åt vänster och börjar med noll representerar värdena i den binära strömmen 2 ^ 0, sedan 2 ^ 1, sedan 2 ^ 2, sedan 2 ^ 3, sedan 2 ^ 4 och sedan 2 ^ 5. Här är ett annat sätt att titta på det. Från vänster är varje position värt 1, 2, 4, 8, 16 och 32. Om det binära numret har 1 i kortplatsen lägger du till det värdet; om det har ett 0 i kortplatsen gör du det inte. Binärsträngen 100110 konverterar till decimaltal 38: 0 * 2 ^ 01 + 1 * 2 ^ 1 + 1 * 2 ^ 2 + 0 * 2 ^ 3 + 0 * 2 ^ 4 + 1 * 2 ^ 5 = 0 + 2 + 4 + 0 + 0 + 32. Base64-kodning tar denna binära sträng och bryter ner den i 6-bitars värdena 38, 58, 11 och 41. Slutligen konverteras dessa siffror till ASCII-tecken med hjälp av Base64-kodningstabellen. 6-bitarsvärdena i detta exempel översätts till ASCII-sekvensen m6Lp. Med hjälp av Base64-omvandlingstabellen:

  • 38 är m
  • 58 är 6
  • 11 är L
  • 41 är s

Denna tvåstegsprocess tillämpas på hela den binära sträng som är kodad. För att säkerställa att de kodade uppgifterna kan skrivas ut ordentligt och inte överskrider en e-postservers gräns för radlängd, infogas nya linjetecken för att hålla linjelängderna under 76 tecken. De nya linjetecknen är kodade som alla andra data. Hela syftet med Base64-kodning, från att lägga till stoppning för att bevara 3-byte binära segment till konvertering av binär till text med hjälp av Base64-tabellen, är att bevara integriteten för den överförda binära informationen.

 

Base64-kodningstabell

Följande tabell översätter alla 64 tecken som används i Base64-kodning.

Base64-kodningstabell
Värde Röding Värde Röding Värde Röding Värde Röding
0 A 16 F 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 Jag 24 Y 40 o 56 4
9 J 25 Z 41 sid 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 /

 

Lösa slutspel

I slutet av kodningsprocessen kan det finnas ett problem. Om storleken på originaldata i byte är en multipel av tre fungerar allt bra. Om den inte är det kan det finnas tomma byte. För korrekt kodning behövs exakt 3 byte binär data. Lösningen är att lägga till tillräckligt med byte med värdet 0 för att skapa en 3-byte-grupp. Två sådana värden läggs till om data behöver en extra byte data, en läggs till för två extra byte. Naturligtvis kan dessa konstgjorda efterföljande 0 inte kodas med hjälp av kodningstabellen nedan. De måste representeras av en 65: e karaktär. Base64-vadderingstecken är lika tecken (=) och placeras i slutet av kodad data.