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?

Weet jij het antwoord?

/2500

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

Bronnen:
http://nl.wikipedia.org/wiki/Base64

Stel zelf een vraag

Ben je op zoek naar het antwoord op die ene vraag die je misschien al tijden achtervolgt?

/100