Base64: geen encryptie

Eén vorm gaat door een prisma en komt er als dezelfde vorm weer uit, alleen anders ingekleurd.

Stel: iemand stuurt je SGV5LCBnZWhlaW0h. Dat ziet eruit als een code. Het is ook een code — maar er is geen sleutel, geen wachtwoord, geen geheim. Iedereen kan het in één klik terugdraaien. Dit is het verschil tussen anders opschrijven en echt verbergen, en dat verschil is de reden dat dit hoofdstuk eerst komt.

Woorden die je zo nodig hebt

Byte
Alles in een computer — een letter, een pixel, een noot in een liedje — is uiteindelijk een getal van 0 tot 255. Zo'n getal heet een byte. De letter A is byte 65, een spatie is 32.
Coderen
Dezelfde informatie op een andere manier opschrijven. Zoals "vijf" en "5" en "V" hetzelfde getal zijn. Er gaat niets verloren en er wordt niets verborgen.
Base64
Een manier om bytes op te schrijven met alleen letters, cijfers, + en /. Elke drie bytes worden vier tekens. Daardoor wordt alles een derde langer. In een webadres neemt men een variant met - en _, omdat + en / daar al iets anders betekenen.
Hexadecimaal
Nog een manier om bytes op te schrijven, nu met de cijfers 0–9 en de letters a–f. Elke byte wordt twee tekens: 41 is de letter A. Je ziet dit straks in de demo.

Waarom bestaat dat dan?

Vroeger konden e-mailprogramma's alleen gewone tekst versturen. Stuurde je een foto mee, dan kwam die aan de andere kant beschadigd aan, omdat er bytes in zaten die de mailserver niet begreep. De oplossing: zet die bytes om in tekens die elk programma wél begrijpt, en draai het aan de andere kant terug. Dat is base64.

Alles wat op een computer staat, kan je in base64 zetten: een foto, een liedje, een PDF, een heel programma. Wat eruit komt is gewone tekst — letters, cijfers en een paar leestekens, meer niet. En tekst kan je overal kwijt.

In een webadres. Als bijlage bij een mail. In een berichtje dat je gewoon selecteert, kopieert en ergens anders plakt. Onderweg gaat er niets stuk, want geen enkel programma gaat aan een A of een 7 zitten prutsen. Met rauwe bytes loopt dat wél mis: één regeleinde dat onderweg omgezet wordt, of één byte die als "hier stopt het bestand" gelezen wordt, en je foto is onherstelbaar. Dat is de hele afweging — je bestand wordt een derde langer, en in ruil overleeft het elke reis.

Daarom zit het vandaag nog overal: in de foto op je identiteitskaart als die uitgelezen wordt, in de sleutels die je straks zelf gaat maken, en in elke bijlage die je meestuurt met een mail.

Probeer het zelf

Alles gebeurt in je browser. Er wordt niets naar de server gestuurd.

  1. Klik op Naar base64. Je ziet je zin als bytes én als base64.
  2. Plak het base64-resultaat in het vak en klik Terug naar tekst. Je zin komt terug. Zonder wachtwoord.
  3. Plak nu SGV5LCBnZWhlaW0h en klik Terug naar tekst.

Kijk naar de regel Bytes (hex). Dat zijn de echte getallen waaruit je zin bestaat. Base64 en hexadecimaal zijn allebei gewoon een manier om die getallen op te schrijven — zoals je een getal in cijfers of in woorden kan schrijven. Geen van beide verbergt iets.

De test die je vanaf nu altijd kan doen

Zie je iets dat er onleesbaar uitziet, stel dan één vraag: is er een sleutel nodig om het terug te draaien? Nee? Dan is het codering, en dan is het niet geheim, hoe raar het er ook uitziet. Ja? Dan pas is het encryptie. Alles wat volgt op deze site gaat over dat "ja".

Je gaat dit de hele site terugzien. Bijna elk hoofdstuk hierna toont zijn resultaat in base64: het versleutelde pakket in hoofdstuk 4, je publieke sleutel in hoofdstuk 6, het bericht dat je via WhatsApp verstuurt in hoofdstuk 8.1, je pasfoto als je ze uit de chip haalt in hoofdstuk 8.2. Telkens om de reden hierboven: er moeten bytes door iets dat alleen tekst aankan. En telkens geldt hetzelfde — wat daar geheim is, zit in de bytes. Nooit in de base64 eromheen.

Dit is wiskunde: tellen in een ander grondtal

Jij telt in tientallen: 10 cijfers, van 0 tot 9. Een computer telt in tweeën: 0 en 1. Hexadecimaal telt in zestientallen, base64 in vierenzestigtallen. Het is allemaal hetzelfde getal, anders geschreven. De vraag "hoeveel tekens heb je nodig om een getal op te schrijven?" is een kwestie van logaritmen — en dat is precies waarom 3 bytes altijd 4 base64-tekens worden: 224 = 644. Reken maar na.