Förklaring av BASE64

Att hantera långa textstycken eller texter med specialtecken kan i vissa fall innebära problem.

Ett scenario är om text ska skickas mellan två klienter via en server som har en annorlunda teckenuppsättning än dess klienter, vilket då kan resultera i förlust av data.

För att lösa detta finns en textkodning kallad BASE64, som används för att skapa text bestående av standardtecken utifrån binär data. De tecken som ingår i dess teckenuppsättning är a-z (gemener), A-Z (versaler), 0-9 samt ”+” och ”/” (64 tecken, därav namnet BASE64). Dessa tecken är även ”httpsäkra” vilket innebär att de kan skickas med i en URL utan att resultera i några problem.
BASE64-kodning kan utföras på alla tecken som ingår i ASCII, dvs 255 olika tecken. Exempel där denna kodning används inkluderar nästan samtliga krypterings-funktioner. Det används också i .net för att skriva ut viewstate.

Själva omkodningen till BASE64 fungerar enligt följande:

  • Omgruppera texten till block bestående av 3-tecken vardera (24 bitar)
  • Omvandla varje tecken i blocket (3 tecken/block) till dess ASCII-kod
  • Gruppera om bitarna i de tre talen till 4 nya tal (6 bitar i varje).
  • Hämta ASCII-tecknet för dessa 4 nya tal.
  • Hämta det index i BASE64-kodsträngen för respektive värde.

Om texten inte är delbar med 3 används en ”padding” med ”=”-tecken för att fylla ut detta ”gap”.

Exempel
Vi tar texten ”swe” som exempel.
Då denna text enbart består av 3 tecken behövs ingen omgruppering.

Vi omvandlar sedan varje tecken till dess ASCII-tal:
s = 115, w = 119 och e = 101.

Dess binära representation blir då:
s = 1110011, w = 1110111 och e = 1100101

Med 8-bitar blir de alltså:
01110011 01110111 01100101

Uppdelat på 4 block med 6 bitar i varje får vi då:
011100 110111 011101 100101

Omvandlat till decimaltal får vi då:
28, 55, 29 och 37

Den uppsättning av BASE64-tecken som vi alltså ska använda oss av är:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Så sista steget är alltså att hämta rätt tecken från den position som respektive värde visar.

Detta ger oss:
28 = c, 55 = 3, 29 = d och 37 = l

Texten ”swe” omvandlat till BASE64 blir alltså: ”c3dl”.

För att avkoda en BASE64-sträng tillbaka till dess ursprungsvärde, så vänds helt enkelt förloppet.

Att koda om en text till BASE64 är i .NET mycket enkelt. Man använder här klassen ”System.Convert” och dess metod ”ToBase64String”. Denna tar som inparameter en array av bytes. Dessa skapas alltså separat, då olika ”text-encodings” kan generera olika bytes beroende på specialtecken såsom ”åäö” tex.

Exempel på kodning och avkodning är:

//Till base64
byte[] data = System.Text.Encoding.UTF8.GetBytes("swe");
string base64String = System.Convert.ToBase64String(data);

//Från base64
byte[] data = System.Convert.FromBase64String(base64String);
string text = System.Text.Encoding.UTF8.GetString(data);

1 kommentar

  1. […] I varje hashfunktion finns en algoritm som utför en matematisk beräkning på den data som skickas in. Dessa algoritmer finns i flera utföranden, där MD5 och SHA tillhör de vanligaste. Internt arbetar algoritmen med bytes, och måste därmed bearbeta dess slutliga värde för att få en textrepresentation av resultatet. Vanligast är att dessa bytes omvandlas till ett HEX-tal eller omkodat till BASE64. […]

RSS feed for comments on this post

Kommentarer inaktiverade.

%d bloggare gillar detta: