Base64URL versus standaard Base64: alfabet, opvulling en URL parseren

Herken streepjes en onderstrepingstekens, begrijp optionele opvulling en voorkom corruptie van plus naar spatie in URL queryparameters.

Base64URL verandert twee alfabettekens: standaard Base64's plus wordt een streepje en de schuine streep wordt een onderstrepingsteken. De gecodeerde informatie is ongewijzigd. De variant helpt wanneer het omringende protocol een speciale betekenis geeft aan plus of slash, maar stelt de waarde niet vrij van elke URL of toepassingsregel.

Gebruik een vector die het verschil blootlegt

De bytes FB FF coderen als +/8= in standaard Base64 en -_8= in Base64URL. Een test zoals Hello produceert alleen gedeelde alfabettekens en kan dus niet onthullen of de URL-veilige conversie werkt.

const standard = btoa(String.fromCharCode(251, 255));
const urlSafe = standard.replace(/\+/g, '-').replace(/\//g, '_');
console.log(standard); // +/8=
console.log(urlSafe); // -_8=

Opvulling is een aparte overeenkomst

Veel tokenformaten laten afsluitende gelijktekens weg, terwijl andere systemen ze behouden. Het alfabet wijzigen en opvulling verwijderen zijn afzonderlijke keuzes. Als de lengte van invoer zonder opvulling bij deling door 4 een rest van 2 geeft, zijn twee gelijktekens nodig; bij een rest van 3 is één gelijkteken nodig. Een rest van 1 kan niet alleen met opvulling worden hersteld, omdat één teken van zes bits onvoldoende is om een volledige byte te beschrijven.

Controleer bij het valideren ook ongebruikte bits in het laatste teken. Een decoder die ze negeert, accepteert mogelijk meerdere strings voor dezelfde bytereeks. Die dubbelzinnigheid kan van belang zijn wanneer een toepassing gecodeerde tekenreeksen vergelijkt in plaats van gedecodeerde bytes. Een canonieke producent moet één overeengekomen vertegenwoordiging uitbrengen.

Verwar het parseren van query's niet met Base64-decodering

Bij het parseren van query's in formulierstijl wordt een letterlijk plusteken geïnterpreteerd als een spatie. Een standaard Base64-waarde die zonder escapecodes in een query is geplakt, kan daarom beschadigd raken voordat de decoder deze ziet. Construeer de query met URLSearchParams, of gebruik de variant Base64URL als het ontvangende protocol dit specificeert.

const query = new URLSearchParams({ payload: '+/8=' });
console.log(query.toString()); // payload=%2B%2F8%3D
console.log(query.get('payload')); // +/8=

Vervang niet automatisch elke spatie door een plus: een spatie kan een echte opmaak zijn of een bewijs van een andere fout. Bewaar de bron, identificeer de transportlaag die deze heeft gewijzigd en pas een doelbewuste correctie toe. Voor JWT-segmenten gebruikt u de Base64URL-regels van het tokenformaat in plaats van een algemeen reparatiebeleid uit te vinden.

De standaard en URL-veilige alfabetten worden beschreven in RFC 4648. Uw integratie heeft nog steeds expliciete keuzes nodig voor opvulling, acceptatie van witruimte en maximale lengte.