Een afbeelding die als lange reeks letters in een pagina is ingebed, een adres waarin spaties %20 worden, een inlogtoken dat uit drie blokken met punten ertussen bestaat: Base64, URL-codering en JWT's kom je dagelijks tegen bij webontwikkeling. Ze lijken op elkaar, worden gemakkelijk verward en geen van drieën is versleuteling. Dit doen ze echt en zo decodeer je ze veilig.
Base64: bytes afdrukbaar maken
Base64 stelt binaire gegevens (een afbeelding, een pdf) voor met slechts 64 veilige tekens: A-Z, a-z, 0-9, + en /. Het wordt gebruikt overal waar een kanaal alleen tekst accepteert: e-mailbijlagen, afbeeldingen ingebed in CSS of HTML (voorvoegsel data:), tokens, sommige configuratiebestanden.
Het principe: 3 bytes (24 bits) worden in 4 groepen van 6 bits verdeeld, elk voorgesteld door één teken. “Man” wordt bijvoorbeeld “TWFu” en “Hello” wordt “SGVsbG8=” (het =-teken vult het laatste onvolledige blok aan). Het numerieke gevolg: Base64 maakt van 3 bytes altijd 4 tekens, dus +33% in omvang. Een afbeelding van 1 MB die als data: is ingebed, weegt ongeveer 1,33 MB.
Nogmaals: Base64 is geen versleuteling. Iedereen decodeert het in een oogwenk. Gebruik het nooit om een wachtwoord te “verbergen”.
Coderen en decoderen met Base64 coderen en decoderen
- Kies Coderen of Decoderen en plak vervolgens tekst of sleep een bestand (maximaal 24 MB: Base64 voegt een derde toe en daarboven zou het tabblad vertragen).
- Tekst wordt vóór het coderen naar UTF-8 omgezet: accenten, Arabisch en emoji komen ongeschonden heen en terug, anders dan bij een kale btoa in JavaScript.
- Bij het decoderen worden beide alfabetten (standaard en “URL-safe” met - en _ in plaats van + en /), de aan- of afwezigheid van =, regeleinden en een voorvoegsel data:… automatisch geaccepteerd.
- Als de gedecodeerde bytes geen tekst zijn, herkent de tool het type (PNG, JPEG, PDF, ZIP…), toont hij een voorbeeld van afbeeldingen en biedt hij het bestand ter download aan.
- Uitvoeropties: URL-safe variant, zonder opvulling (=), MIME-regeleinden, voorvoegsel data:.
URL-codering (procentcodering)
Een webadres mag maar bepaalde tekens bevatten. De andere worden vervangen door een “%” gevolgd door twee hexadecimale cijfers die de UTF-8-bytes weergeven. De letter “é” wordt %C3%A9, de Arabische letter “م” wordt %D9%85 en de emoji “😀” wordt %F0%9F%98%80 (vier bytes). Een spatie wordt %20, of + in een klassiek HTML-formulier.
| Type | Codeert | Gebruik het voor |
|---|---|---|
| Component | Alles behalve veilige tekens | De waarde van een parameter (?naam=waarde). |
| Volledige URL | Behoudt / ? # & = | Een volledig, al gestructureerd adres. |
| Formulier | Spatie als + | De body van een HTML-formulier. |
Bij het decoderen wordt een fout (“100%” of “%ZZ”) gelokaliseerd en uitgelegd; de tolerante modus decodeert wat geldig is en laat de rest staan. Als het resultaat nog steeds %XX-reeksen bevat, meldt de tool dubbele codering en stelt hij voor opnieuw te decoderen. De kaart “Een URL analyseren” splitst een adres in schema, gebruikersnaam, host, pad en parameters.
Veelgemaakte fouten
- Base64 voor versleuteling aanzien en er een wachtwoord in “verbergen”.
- Een waarde twee keer coderen en %2520 krijgen in plaats van %20.
- Codering van de volledige URL gebruiken op de waarde van een parameter, waardoor een niet-gecodeerde & of = blijft staan en het verzoek breekt.
- De inhoud van een JWT vertrouwen zonder de handtekening te verifiëren.
- Accenten verliezen door te coderen met een functie die niet via UTF-8 gaat.
Eerlijke beperkingen
- De weergave van een zeer lang resultaat wordt afgekapt, maar kopiëren en downloaden zijn volledig.
- Een JWT verifiëren vereist de sleutel: zonder sleutel kun je alleen lezen.
- Geen van deze drie mechanismen beschermt gevoelige gegevens: daarvoor is echte versleuteling nodig.
Veelgestelde vragen
Waarom maakt Base64 gegevens groter?
Omdat het 3 bytes met 4 tekens weergeeft: het volume groeit met een derde (33%), plus eventuele opvulling aan het eind.
Is Base64 veilig om informatie te verbergen?
Nee. Er is geen sleutel en het decodeert direct. Het is geen versleuteling.
Wordt mijn JWT naar een server gestuurd?
Nee. Het token, het geheim en de sleutel blijven in je browser.
Wat betekent %20 in een adres?
Het is een gecodeerde spatie: het teken met code 0x20 wordt geschreven met een % gevolgd door de hexadecimale waarde.
Hoe decodeer ik een Base64-afbeelding?
Plak de tekenreeks (met of zonder voorvoegsel data:) in de tool: hij herkent het bestandstype, toont het voorbeeld en biedt de download aan.