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.
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. Het zit vandaag nog overal: in de foto op je identiteitskaart als die uitgelezen wordt, in de tokens waarmee je ingelogd blijft op een website, in certificaten.

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".

Ken je die "tokens" van websites? Als je ingelogd bent, bewaart je browser vaak zo'n lange reeks tekens met twee puntjes erin. Dat is een JWT, en de eerste twee delen zijn gewoon base64. Iedereen kan lezen wat erin staat — je naam, je gebruikersnummer. Wat niemand kan vervalsen, is het derde deel: de handtekening. Hoe dát werkt, zie je in hoofdstuk zeven.

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.