Hét vraag- en antwoordplatform van Nederland

Zijn de 'is gelijk aan'-tekens aan het einde van een base64 regel noodzakelijk?

Stel ik heb via PHP een gecodeerd in base64. De uitkomst daarvan is R29laWVWcmFhZw==

Maar als ik hem nu decodeer, zowel met als zonder die = tekens, dan krijg ik hetzelfde resultaat:

echo base64_decode('R29laWVWcmFhZw=='); // geeft 'GoeieVraag' weer
echo base64_decode('R29laWVWcmFhZw'); // geeft 'GoeieVraag' weer

Oftewel, kan ik die = tekens ook gewoon weglaten als ik iets moet decoderen vanuit base64?

Verwijderde gebruiker
13 jaar geleden
Geef jouw antwoord
0 / 2500
Geef Antwoord

Het beste antwoord

Strict genomen horen ze er bij. Het base64 alfabet bestaat uit (surprise surprise) 64 karakters, het =-teken zit daar niet bij. Elk karakter representeert 6 bits (immers 2 tot de macht 6 is 64). Maar de data die je encodeert is typisch een veelvoud van 8-bits (namelijk bytes). Dan kan het zijn dat je 6-bits reeks niet precies past in de 8-bits reeks.

Dan komen de = tekens om de hoek kijken. De 6 bits base64 reeks wordt aangevuld met "dummy" bits. Elk = teken staat voor twee 0-bits die aan het eind worden toegevoegd. Om de 6 bits reeks en 8 bits reeks weer gelijk te krijgen, moet je 00 of 0000 toevoegen. Oftewel = of ==.

Toegevoegd na 3 minuten:
Om jouw voorbeeld aan te halen: "GoeieVraag" bestaat uit 10 bytes, dus 80 bits. Het eerste veelvoud van 6 bits groter dan 80 is 14, want 14*6=84. En dat klopt, want de lengte van R29laWVWcmFhZw is 14. Maar 84 is niet deelbaar door 8. Om het deelbaar te maken, moeten er 4 bits bij. Dan krijg je 88. En 4 bits geef je aan met "==".

Toegevoegd na 7 minuten:
Als je een stukje data past dat precies past, krijg je geen = tekens. Pak bv. een tekst van 12 karakters, dat is 12*8=96 bits, en dat is deelbaar door zowel 6 als 8. Dan heb je geen = tekens nodig!

Base64("GoeieVraagje") = R29laWVWcmFhZ2pl
Verwijderde gebruiker
13 jaar geleden
Deel jouw antwoord
0 / 2500
Geef Antwoord
logo van Kompas Publishing

GoeieVraag.nl is onderdeel van Kompas Publishing