Base64

Base64 is een manier om binaire code te converteren naar ASCII-tekens. De codering wordt onder meer gebruikt in e-mail om bijlagen te versturen (zie MIME), maar ook op andere manieren wordt het op internet gebruikt. De conversie naar ASCII is noodzakelijk omdat veel protocollen op internet gebouwd zijn op het gebruik van (7 bits) ASCII-tekens en niet van binaire code van 8 bits.

De inhoud van een binair bestand wordt vaak getoond in hexadecimale vorm, met 16 verschillende tekens (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E en F), waarbij elk teken 4 bits vertegenwoordigt. Base64 is een 6 bitscodering. Dat betekent dat er verschillende tekens zijn, vandaar de naam base64. Base64 is daardoor korter dan een hexadecimale codering, het heeft ongeveer 133% van de lengte van 8 bitscodering, terwijl een hexadecimale codering twee keer zo lang is als de oorspronkelijke 8 bitscodering.

Het gemeenschappelijke voordeel van base64- en hexadecimale codering is dat alle tekens visueel onderscheidbaar zijn. Dat zijn niet alle tekens die onder de ASCII-codering vallen (onder meer niet de eerste 33 ASCII-tekens, waaronder de spatie en de carriage return).

Omzetten

Het met de hand omzetten van een 8 bittekenreeks naar base64 gaat als volgt:

  1. De tekens worden omgezet in het binair
  2. Er wordt steeds een groepje van zes bits genomen
  3. De groepjes bits worden omgezet in decimaal
  4. Per decimaal getal (variërend van 0 tot en met 63) wordt het teken genomen dat op positie (n+1) in de base64-tekenreeks ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ staat.

Het komt niet altijd uit, aangezien het aantal bits een 6-voud moet zijn. Als dat niet het geval is, worden er, afhankelijk van het aantal benodigde extra bits, 2 of 4 nullen achter gezet. Als er 2 nullen zijn toegevoegd, wordt "=" achter het eindresultaat gezet, bij 4 nullen komt er "==" achter. Zo is de lengte van een base64-tekenreeks altijd een 4-voud.

Een voorbeeld met de tekenreeks "π ∈ ℝ", gecodeerd als UTF-8: 11001111 10000000 00100000 11100010 10001000 10001000 00100000 11100010 10000100 10011101

groeperen in groepjes van 6:

110011 111000 000000 100000 111000 101000 100010 001000 001000 001110 001010 000100 100111 01

toevoegen van vier nullen:

110011 111000 000000 100000 111000 101000 100010 001000 001000 001110 001010 000100 100111 010000

omzetten naar decimaal:

51 56 0 32 56 40 34 8 8 14 10 4 39 16

betreffende teken kiezen uit de base64-tekenreeks:

z 4 A g 4 o i I I O K E n Q

eindresultaat:

z4Ag4oiIIOKEnQ== (twee "="-tekens zijn toegevoegd, vanwege de vier nullen die eerder toegevoegd zijn).

Een computer zet de getallen niet eerst om in decimaal, omdat computers zelf met het binaire systeem werken.

Het aantal tekens (inclusief de toegevoegde "="-tekens) in het eindresultaat is altijd een 4-voud. Dit valt als volgt te beredeneren. Elke groep van 3 bytes (24 bits) leidt tot 4 groepjes van 6 bits en dus 4 Base64-tekens. Een losse byte leidt na aanvulling met 4 nullen tot 2 Base64-tekens waarna er 2 =-tekens toegevoegd worden. In totaal dus 4 tekens. Twee losse bytes leiden na aanvullen met 2 nullen tot 3 Base64-tekens waarna er 1 "="-teken toegevoegd wordt. In totaal dus ook 4 tekens.

Base58

Base58 is een variant van Base64, waarbij 6 tekens zijn weggelaten: 0OIl+/. De tekenreeks is dus:

ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz123456789.

Base58Check heeft dezelfde tekens, maar met de cijfers voorop:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

waarbij de codering wat langer is door enkele controletekens uit dezelfde tekenset.

Deze laatste wordt onder meer gebruikt voor een bitcoinadres.

Zie ook

  • Uuencode en BinHex, andere manieren om binaire code om te zetten tot ASCII.
  • Inline image, gebruik van base64 om een plaatje in HTML-code onder te brengen.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.