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
12 jaar geleden
1.3K
Verwijderde gebruiker
12 jaar geleden
Officieel horen ze er dus bij volgens de base64 definitie. Dat de php decode functie het nog goed doet als je ze weglaat is dus 'mazzel'. Maar stel je nu eens voor dat je twee base64 berichten aan elkaar wilt plakken... Dan gaat het decoderen de mist in zonder de stuffing bits...

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

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
(Lees meer...)
Verwijderde gebruiker
12 jaar geleden
Verwijderde gebruiker
12 jaar geleden
Dus die = tekens zijn in feite gewoon voor de opvulling?
Waardoor die dus genegeerd worden in PHP.
Verwijderde gebruiker
12 jaar geleden
Het werkt blijkbaar nog als je ze weglaat, maar ik zou ze er bij houden...

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 2500
Gekozen afbeelding