[GIDS] 8 min lezen

[GIDS] Volledige Base64 Referentie

Alles wat je moet weten over Base64 codering: theorie, implementatie en best practices.

Januari 2025 | fundamentals

// WAT IS BASE64?

Base64 is een binair-naar-tekst coderingschema dat binaire data weergeeft met 64 ASCII-karakters. Het is ontworpen om binaire data te coderen die moet worden opgeslagen en overgedragen via media die ontworpen zijn voor tekstuele data.

De Base64-karakterset bevat A-Z, a-z, 0-9, en twee extra karakters (meestal + en /), plus = voor padding.

// HOE BASE64 WERKT

Base64-codering werkt door binaire data te nemen en het om te zetten naar een string van ASCII-karakters. Het proces omvat:

1. Splits de invoer in 6-bit chunks (Base64 gebruikt 6 bits per karakter) 2. Koppel elke 6-bit waarde aan een karakter in het Base64-alfabet 3. Voeg padding toe met '=' karakters indien nodig

// Voorbeeld: Coderen van 'Man' naar Base64
// 'M' = 01001101, 'a' = 01100001, 'n' = 01101110
// Gecombineerd: 010011010110000101101110
// Gesplitst in 6-bit groepen: 010011 010110 000101 101110
// Decimale waarden: 19, 22, 5, 46
// Base64-karakters: T, W, F, u
// Resultaat: 'TWFu'

// VEEL VOORKOMENDE TOEPASSINGEN

  • > Afbeeldingen insluiten in HTML/CSS (data URI's)
  • > Binaire data coderen voor JSON API's
  • > E-mailbijlagen (MIME-codering)
  • > Binaire data opslaan in databases
  • > Authenticatietokens en API-sleutels
  • > URL-veilige datatransmissie

// JAVASCRIPT IMPLEMENTATIE

Moderne browsers bieden ingebouwde Base64 coderings- en decoderingsfuncties:

Voor het coderen van tekst naar Base64, gebruik btoa() (binary to ASCII). Voor het decoderen van Base64 naar tekst, gebruik atob() (ASCII to binary).

// Tekst coderen naar Base64
const text = 'Hello, World!';
const encoded = btoa(text);
console.log(encoded); // SGVsbG8sIFdvcmxkIQ==

// Base64 decoderen naar tekst
const decoded = atob(encoded);
console.log(decoded); // Hello, World!

// Voor Unicode-strings, gebruik TextEncoder/TextDecoder
const encoder = new TextEncoder();
const decoder = new TextDecoder();

const unicodeText = 'Hello, 世界!';
const bytes = encoder.encode(unicodeText);
const base64 = btoa(String.fromCharCode(...bytes));
console.log(base64);

// BEVEILIGINGSOVERWEGINGEN

Base64 is GEEN versleuteling of beveiliging. Het is gewoon codering voor datarepresentatie. Belangrijke beveiligingsnotities:

Gebruik nooit Base64 alleen voor bescherming van gevoelige data. Valideer altijd Base64-invoer om injectie-aanvallen te voorkomen. Wees je ervan bewust dat Base64 de datagrootte met ~33% vergroot.

  • > Base64 is gemakkelijk omkeerbaar - het biedt geen beveiliging
  • > Valideer en zuiver altijd Base64-invoer
  • > Gebruik juiste versleuteling voor gevoelige data
  • > Overweeg URL-veilige Base64-varianten voor webapplicaties
  • > Wees bewust van padding oracle-aanvallen in sommige contexten

// BEST PRACTICES

  • > Gebruik URL-veilige Base64 voor webapplicaties (vervang + met -, / met _)
  • > Behandel padding altijd correct
  • > Valideer invoerlengte en karakters
  • > Overweeg compressie vóór codering voor grote data
  • > Gebruik streaming voor zeer grote datasets
  • > Implementeer juiste foutafhandeling voor ongeldige invoer