Skip to content
Terug naar blog
Tutorials

Wat is Base64-codering? Een beginnersgids

Nieuw met Base64? Leer wat Base64-codering is, hoe encoderen en decoderen werken en waarom ontwikkelaars het dagelijks gebruiken.

8 min leestijd

Base64-codering begrijpen

Nieuw met Base64? Je bent aan het juiste adres. Deze toegankelijke gids legt uit wat Base64 is, hoe het stap voor stap werkt en waar je het als ontwikkelaar tegenkomt. Voor gevorderde onderwerpen zoals MIME-codering, data-URL’s, prestatieoptimalisatie en beveiligingsoverwegingen zie onze gevorderde Base64-gids.

Base64-codering is een fundamentele techniek die overal in moderne softwareontwikkeling wordt toegepast. Of je nu afbeeldingen in HTML insluit, binaire gegevens via tekstgebaseerde protocollen verzendt of met API’s werkt — Base64 begrijpen is essentieel.

Wat is Base64?

Base64 is een coderingsschema dat binaire gegevens omzet naar een ASCII-string. Het gebruikt een set van 64 tekens (A-Z, a-z, 0-9, +, /) om gegevens te representeren, waarbij = wordt gebruikt als opvulling.

De naam “Base64” komt voort uit het feit dat er precies 64 printbare ASCII-tekens als alfabet worden gebruikt. Het schema ontstond in de begindagen van e-mail, toen de MIME-standaard (Multipurpose Internet Mail Extensions) een betrouwbare manier nodig had om binaire bestanden — zoals afbeeldingen en documenten — mee te sturen met e-mailberichten die alleen 7-bits ASCII-tekst aankonden. Base64 is formeel vastgelegd in RFC 4648, en de wortels gaan terug tot de PEM-specificatie (Privacy Enhanced Mail) uit eind jaren tachtig. Sindsdien is het een van de meest gebruikte coderingsschema’s in de informatica geworden.

Waarom Base64 gebruiken?

  1. Datatransmissie: veel protocollen ondersteunen alleen tekst. Base64 maakt het mogelijk om binaire inhoud veilig te verzenden.
  2. Data-URI’s: sluit kleine afbeeldingen of bestanden rechtstreeks in HTML/CSS in via data-URI’s.
  3. API-payloads: verzend binaire gegevens in JSON-payloads zonder coderingsproblemen.
  4. E-mailbijlagen: MIME-codering gebruikt Base64 voor bijlagen.

Een paar concrete voorbeelden uit de praktijk:

  • E-mailbijlagen (MIME): wanneer je een PDF of afbeelding aan een e-mail toevoegt, codeert je mailprogramma het bestand in Base64 en plaatst het als tekstblok in het bericht zelf. Het programma van de ontvanger decodeert het terug naar het oorspronkelijke bestand.
  • Afbeeldingen insluiten in HTML/CSS: in plaats van naar een externe afbeelding te linken, kun je deze inline plaatsen als data-URL: <img src="data:image/png;base64,iVBOR...">. Dit scheelt een extra HTTP-verzoek, wat handig is voor kleine iconen en sprites.
  • Binaire gegevens opslaan in JSON/XML: JSON en XML zijn tekstformaten die ruwe bytes niet ingebouwd kunnen weergeven. Met Base64 kun je binaire inhoud — zoals thumbnails, cryptografische sleutels of certificaten — als een gewoon string-veld opnemen.
  • HTTP Basic Authentication: de Authorization-header codeert inloggegevens als Basic base64(username:password). Zo wordt user:pass bijvoorbeeld Basic dXNlcjpwYXNz. Let op: dit is codering, geen versleuteling — gebruik het altijd in combinatie met HTTPS.

Hoe Base64-codering werkt

Base64-codering werkt door elke 3 bytes (24 bits) binaire gegevens te nemen en om te zetten naar 4 tekens (elk 6 bits):

Original:   01001101 01100001 01101110  (3 bytes = "Man")
Split:      010011 010110 000101 101110  (4 groups of 6 bits)
Base64:     T      W      F      u       (4 characters)

Stapsgewijs voorbeeld: “Hi” encoderen

We lopen de korte string “Hi” stap voor stap door, zodat je precies ziet wat er in elke fase gebeurt:

1. Bepaal de ASCII-waarden:

  • H = 72, i = 105

2. Zet om naar 8-bits binair:

  • H = 01001000, i = 01101001

3. Plak alle bits aan elkaar:

  • 01001000 01101001 (16 bits in totaal)

4. Splits in groepen van 6 bits (vul de laatste groep aan met nullen):

  • 010010 000110 100100
  • De oorspronkelijke 16 bits hebben 3 groepen van 6 nodig (= 18 bits), dus er worden 2 nulbits toegevoegd.

5. Zoek elke 6-bits waarde op in het Base64-alfabet:

  • 010010 = 18 → S
  • 000110 = 6 → G
  • 100100 = 36 → k

6. Voeg opvulling toe: omdat de invoer 2 bytes lang was (geen veelvoud van 3), wordt één = toegevoegd.

Resultaat: SGk=

De opvullingsregel is eenvoudig: als de invoerlengte mod 3 gelijk is aan 1, voeg je == toe; bij 2 voeg je = toe, en bij 0 is geen opvulling nodig.

Veelvoorkomende valkuilen

Toename in omvang

Base64 vergroot de datagrootte met ongeveer 33%. Een afbeelding van 1 MB wordt na Base64-codering ongeveer 1,37 MB (de precieze overhead hangt af van regeleinden en opvulling). Voor kleine assets zoals iconen is dit verwaarloosbaar, maar voor grote bestanden loopt de overhead snel op — een video van 10 MB wordt meer dan 13 MB. Weeg af of het gemak van inline insluiten opweegt tegen de extra omvang.

Geen versleuteling

Base64 is codering, geen versleuteling. Het biedt geen enkele beveiliging en is eenvoudig te decoderen. Iedereen kan het direct decoderen — in JavaScript geeft atob('SGVsbG8=') gewoon "Hello" terug. Gebruik Base64 nooit om wachtwoorden, tokens of gevoelige gegevens te verbergen. Heb je vertrouwelijkheid nodig, gebruik dan echte versleuteling (AES, RSA, enzovoort).

URL-veiligheid

Standaard Base64 gebruikt + en /, en die hebben een speciale betekenis in URL’s en queryreeksen. Zo zou data+test/value in standaard Base64 een URL-parameter breken. URL-safe Base64 vervangt + door - en / door _, wat strings oplevert zoals data-test_value die veilig in URL’s kunnen worden gebruikt zonder percent-encoding. De meeste talen bieden een URL-safe variant — gebruik die altijd als Base64-uitvoer in een URL terechtkomt.

Base64 in verschillende programmeertalen

De meeste talen hebben ingebouwde Base64-ondersteuning. Twee veelgebruikte voorbeelden:

// JavaScript (browser and Node.js)
btoa('Hello')     // "SGVsbG8="
atob('SGVsbG8=')  // "Hello"
# Python
import base64
base64.b64encode(b'Hello').decode()   # 'SGVsbG8='
base64.b64decode('SGVsbG8=').decode()  # 'Hello'
// Go
package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    encoded := base64.StdEncoding.EncodeToString([]byte("Hello"))
    fmt.Println(encoded) // "SGVsbG8="

    decoded, _ := base64.StdEncoding.DecodeString("SGVsbG8=")
    fmt.Println(string(decoded)) // "Hello"

    // URL-safe variant
    urlEncoded := base64.URLEncoding.EncodeToString([]byte("Hello?World"))
    fmt.Println(urlEncoded) // "SGVsbG8/V29ybGQ="
}

In JavaScript encodeert btoa() (binary-to-ASCII) en decodeert atob() (ASCII-to-binary). Let op: btoa() verwerkt alleen Latin-1-tekens; voor Unicode-strings moet je eerst naar UTF-8 encoderen. De base64-module van Python werkt met bytes-objecten, dus je encodeert een string eerst naar bytes met b'...' of .encode() voordat je hem doorgeeft. Het pakket encoding/base64 van Go biedt zowel StdEncoding als URLEncoding direct bruikbaar, zodat je eenvoudig de juiste variant voor je toepassing kiest. De meeste andere talen — Java, C#, Ruby, PHP — bieden vergelijkbare one-liner-API’s in hun standaardbibliotheek.

Onze Base64-tool gebruiken

Met onze Base64 Encoder/Decoder kun je eenvoudig:

  • Tekst of bestanden encoderen naar Base64
  • Base64-strings decoderen
  • Data-URI’s genereren voor web-insluiting
  • URL-safe coderingsvarianten verwerken

Veelgestelde vragen

Waar wordt Base64 voor gebruikt?

Base64 wordt gebruikt om binaire gegevens via kanalen die alleen tekst ondersteunen te verzenden. De meest voorkomende toepassingen zijn afbeeldingen insluiten in HTML/CSS via data-URI’s, e-mailbijlagen encoderen (MIME), binaire payloads in JSON-API’s versturen en inloggegevens coderen in HTTP Basic Authentication-headers. Telkens wanneer een protocol of formaat alleen ASCII-tekst ondersteunt maar je binaire inhoud moet opnemen, is Base64 de standaardoplossing.

Is Base64 hetzelfde als versleuteling?

Nee. Base64 is codering, geen versleuteling — het biedt helemaal geen beveiliging. Iedereen kan een Base64-string direct decoderen met ingebouwde browserfuncties zoals atob() of met commandoregel-tools. Gebruik Base64 nooit om wachtwoorden, API-sleutels of gevoelige gegevens te verbergen. Als je vertrouwelijkheid nodig hebt, gebruik dan echte versleutelingsalgoritmen zoals AES-256 of RSA en verzend altijd via HTTPS.

Waarom vergroot Base64 de bestandsgrootte met 33%?

Base64 zet elke 3 bytes invoer om naar 4 ASCII-tekens uitvoer. Omdat 4/3 = 1,333 is, is de geëncodeerde uitvoer altijd ongeveer 33% groter dan de oorspronkelijke binaire gegevens. Deze overhead is acceptabel voor kleine assets (iconen, thumbnails) maar loopt op voor grote bestanden — een afbeelding van 10 MB wordt na codering ~13,3 MB. Voor grote bestanden is rechtstreekse binaire overdracht meestal efficiënter.

Wat is het verschil tussen standaard Base64 en URL-safe Base64?

Standaard Base64 gebruikt + en / als 62e en 63e teken, maar die hebben een speciale betekenis in URL’s. URL-safe Base64 (gedefinieerd in RFC 4648, sectie 5) vervangt ze door - en _, en levert zo strings op die direct in URL’s en bestandsnamen kunnen worden gebruikt zonder percent-encoding. Gebruik URL-safe Base64 voor JWT-tokens, URL-parameters en elke context waarin de geëncodeerde string in een URL verschijnt.

Kan Base64 overweg met Unicode-tekst zoals Chinees of emoji?

Niet rechtstreeks. De functie btoa() in JavaScript accepteert alleen Latin-1-tekens. Om Unicode-tekst in Base64 te encoderen, zet je hem eerst om naar UTF-8-bytes met TextEncoder en codeer je vervolgens die bytes. In Python roep je .encode('utf-8') aan voordat je de string aan base64.b64encode() doorgeeft. Dit proces in twee stappen zorgt dat multi-byte-tekens correct behouden blijven tijdens de encode/decode-cyclus.

Conclusie

Base64 is een veelzijdig coderingsschema dat elke ontwikkelaar zou moeten begrijpen. Zet het in wanneer je binaire gegevens via kanalen die alleen tekst ondersteunen moet verzenden, maar onthoud dat het geen beveiligingsmaatregel is en dat het de datagrootte vergroot.


Wil je meer weten? Bekijk onze gevorderde Base64-gids: van MIME tot data-URL’s voor implementatiepatronen uit de praktijk, codevoorbeelden in JavaScript en Python, tips voor prestatieoptimalisatie en beveiligingsoverwegingen.

Gerelateerde artikelen

Alle artikelen bekijken