Wat is Base64-encoding en wanneer gebruik je het?
Een praktische uitleg van Base64 - wat het echt doet, waarom het bestaat, en de echte situaties waarin je het nodig hebt.
Base64 is een van die tools die cryptisch klinkt totdat je het kent, en dan zie je het ineens overal. Het zit in de URL’s van afbeeldingen die zijn ingebed in websites, in de tokens die je API-calls authenticeren, in de bijlagen van elke e-mail die ooit is verzonden, en in de QR-codes die je scant in restaurants.
Toch wordt het vaak verkeerd begrepen. Mensen denken dat het encryptie is (nee). Dat het data kleiner maakt (het maakt het groter). Dat het een compressie-formaat is (het is het tegenovergestelde). Laten we dat rechtzetten.
De definitie in één regel
Base64 is een manier om binaire data te representeren als een string van veilige, afdrukbare teksttekens.
Dat is het. Het comprimeert, versleutelt, verhult of beveiligt niets. Het converteert alleen van een formaat dat fragiel is (binaire bytes) naar een formaat dat robuust is (ASCII-tekst).
Het probleem dat Base64 oplost
Computers slaan alles op als binair — reeksen bits, gegroepeerd in bytes. Een byte kan elke waarde zijn van 0 tot 255. De meeste van die waarden komen niet overeen met afdrukbare tekens; veel ervan betekenen iets speciaals voor verschillende systemen:
- Byte 0 is een “null”-teken dat strings beëindigt in C
- Byte 10 is een newline
- Byte 13 is een carriage return
- Bytes 128-255 zijn helemaal geen ASCII — ze worden anders geïnterpreteerd door verschillende encodings
Als je ruwe binaire data probeert te sturen door een systeem dat tekst verwacht — zoals een e-mailbody, een JSON-string, een URL of een SQL-regel — raakt er iets in de war. Een byte-waarde van 13 wordt geïnterpreteerd als newline, een byte van 0 knot je string af, een byte boven 127 wordt omgezet in een onverwacht teken.
Base64 lost dit op door alleen 64 “veilige” tekens te gebruiken: hoofdletters A-Z, kleine letters a-z, cijfers 0-9 en de symbolen + en / (plus = voor padding aan het eind). Elke mogelijke bytecombinatie kan worden gecodeerd met alleen deze tekens. De output komt gegarandeerd ongewijzigd door elk tekstgebaseerd systeem.
Hoe het werkt (kort)
Base64 neemt binaire data 3 bytes tegelijk en converteert elk stuk van 3 bytes in 4 Base64-tekens. Elk teken vertegenwoordigt 6 bits data (want 2⁶ = 64).
3 bytes (24 bits) → 4 base64-tekens (24 bits)
De conversie is een simpele lookup:
- Splits de 24 input-bits in vier 6-bit groepen
- Map elke groep naar een Base64-teken met het alfabet
Als de input niet deelbaar is door 3, wordt het laatste stuk aangevuld met =-tekens zodat de output altijd een veelvoud van 4 is.
Daarom groeit Base64 de data met precies 33%. Elke 3 bytes input wordt 4 bytes output. Een bestand van 1000 bytes wordt ~1334 bytes in Base64.
Waar je Base64 in de praktijk tegenkomt
E-mailbijlagen. E-mail was oorspronkelijk ontworpen om alleen 7-bit ASCII-tekst te dragen. Wanneer je een foto bijvoegt, codeert het e-mailsysteem die foto in Base64 zodat hij de reis door legacy-servers kan overleven. Dit wordt automatisch door je e-mailclient afgehandeld — je ziet de codering nooit — maar onder de motorkap is elke afbeelding, PDF en ZIP die je ooit hebt gemaild Base64-gecodeerd.
Data-URI’s in HTML/CSS. Een data-URI sluit een bestand direct in een HTML- of CSS-document in als een Base64-string:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA..." />
.icon {
background: url('data:image/svg+xml;base64,PHN2Zy...');
}
JSON met binaire payloads. JSON is alleen-tekst — je kunt geen ruwe binaire bytes in een JSON-string zetten. Dus wanneer een API binaire data moet bevatten (een afbeelding, een certificaat, een handtekening), Base64-codeert het eerst de data:
{
"filename": "avatar.png",
"content": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAAC..."
}
Authenticatietokens. JWT’s (JSON Web Tokens), OAuth bearer tokens en verschillende API-keys zijn Base64-gecodeerd. Je herkent ze aan de combinatie van letters, cijfers en + / / / =-tekens.
Voorbeeld JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJS...
Elk segment tussen de punten is apart Base64-gecodeerd. Het eerste segment decodeert naar {"alg":"HS256","typ":"JWT"}.
URL’s. Een variant genaamd “Base64 URL-safe” vervangt de +- en /-tekens door - en _. Hierdoor kan Base64-data in URL’s worden ingebed zonder verdere encodering, wat uitgebreid wordt gebruikt voor korte URL’s, sharing-tokens en compacte ID’s.
Wat Base64 NIET is
Geen encryptie. Base64 is door iedereen omkeerbaar, direct, zonder sleutel. Als je gevoelige data “versleutelt” door Base64 te coderen, kan iedereen die de string onderschept hem in milliseconden decoderen. Base64 is encoding, geen encryptie. Het verschil is cruciaal.
Geen compressie. Base64 vergroot de datagrootte met 33%. Als grootte telt, zou je normaal gesproken eerst comprimeren (gzip, brotli) en daarna Base64 toepassen op het resultaat.
Geen obfuscatie waar iemand op moet vertrouwen. Een Base64-gecodeerd wachtwoord is een plaintext-wachtwoord met een triviale extra stap. Elk beveiligingsmechanisme dat op Base64 steunt als “beschermingslaag” is kapot by design.
Wanneer Base64 gebruiken
Grijp naar Base64 wanneer je binaire data moet verzenden of opslaan via een alleen-tekst kanaal (JSON, e-mail, URL, XML), wanneer je kleine bestanden direct inbedt in HTML of CSS, of wanneer je werkt met een systeem dat een specifieke Base64-gecodeerde input vereist (JWT, OAuth, certificaten).
Gebruik Base64 niet wanneer je data wilt beschermen (gebruik encryptie), wanneer je bytes wilt besparen (gebruik compressie), of wanneer je een binary-safe kanaal beschikbaar hebt — stuur de bytes dan gewoon direct.
Encoderen vs decoderen in de praktijk
Om te encoderen: pak een bestand of string, haal het door een Base64-encoder, krijg tekst die veilig overal kan worden ingebed.
Om te decoderen: pak een Base64-string, haal het door een decoder, krijg de originele bytes terug.
Onze Base64-tool handelt beide af. Je kunt tekst die in het vak is getypt coderen, of een bestand dat je erin dropt coderen. Je kunt een Base64-string decoderen terug naar tekst of het originele binary downloaden. Alles gebeurt in je browser — de data verlaat je apparaat nooit, wat ertoe doet als je werkt met tokens, sleutels of gevoelige documenten.
Een snelle cheatsheet
| Nodig | Oplossing |
|---|---|
| Een afbeelding in HTML inbedden zonder aparte request | Base64-gecodeerde data-URI |
| Een binair bestand in een JSON-API sturen | Base64-codeer het bestand, zet de string in een JSON-veld |
| Een JWT decoderen om zijn claims te zien | Base64-decode elk segment |
| Een klein binair bestand over chat delen | Base64-coderen, plakken, ontvanger decodeert |
| Data verbergen voor gebruikers | Encryptie, geen Base64 |
| Bestanden kleiner maken | Compressie, geen Base64 |
Base64 is een vertaler, geen kluis. Het converteert binaire data in tekst zodat het door alleen-tekst systemen kan reizen — meer niet. Zodra je dat begrijpt, zie je het overal en weet je precies wanneer je het moet gebruiken.