Base64 Decoder

/

Je gegevens zijn 100% privé -- Base64 wordt volledig op je eigen apparaat gecodeerd en gedecodeerd.

Platte tekst
Base64

Wat is Base64?#

Base64 is een manier om binaire gegevens weer te geven als platte tekst met behulp van 64 ASCII-tekens: A–Z, a–z, 0–9, plus + en /. Hiermee kunnen binaire bestanden zoals afbeeldingen, sleutels en e-mailbijlagen veilig worden verzonden via systemen die zijn gebouwd voor tekst. Het is codering, geen versleuteling.

Base64 gebruikt een vast alfabet van 64 tekens. Elke waarde van 0 tot 63 komt overeen met precies één teken, waardoor elk willekeurig 3 bytes aan binaire gegevens wordt omgezet in 4 leesbare tekens:

WaardenTekens
0–25A–Z26 hoofdletters
26–51a–z26 kleine letters
52–610–910 cijfers
62–63+ /2 symbolen

Het "="-teken is de enige uitzondering. Het is opvulling, niet één van de 64 waarden, en maakt alleen het laatste blok compleet.

U hebt het bijna zeker al eerder gezien. Base64 verschijnt overal waar binaire gegevens in tekst moeten worden verwerkt:

  • Een kleine afbeelding of pictogram rechtstreeks in HTML of CSS insluiten
  • Binaire blobs retourneren binnen een JSON API-respons
  • E-mailbijlagen coderen (MIME)
  • Sleutels en certificaten opslaan in PEM-bestanden

Die data-URI-truc ziet er als volgt uit. De lange tekenreeks is de volledige afbeelding:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

Waarom bestaat Base64?#

Vroege netwerkprotocollen waren gebouwd voor tekst, niet voor ruwe bytes. ASCII gebruikte 7 bits en 128 tekens, wat prima werkte voor het Engels maar niet voor binaire gegevens. Sommige systemen beschadigden besturingstekens of herschreven regeleindes (LF naar CR + LF), waardoor afbeeldingen en audio tijdens verzending stilzwijgend werden gecorrumpeerd.

Base64 omzeilt dit alles door alleen tekens te gebruiken die elk systeem al kent. Base16 en Base32 doen hetzelfde met kleinere alfabetten, maar Base64 pakt meer gegevens per teken terwijl het veilig blijft. Dat is waarom het de standaard werd.

Hoe Base64-codering werkt#

Het hele schema is één herhaald idee: neem 3 bytes (24 bits), verdeel ze opnieuw in vier 6-bits groepen en zoek elke groep op in het alfabet. Hier is het woord "Logto", met de hand gecodeerd.

  1. Schrijf elk teken als zijn 8-bits binaire waarde aan de hand van de ASCII-code.
  2. Neem telkens 3 bytes. Dat zijn 24 bits.
  3. Verdeel dezelfde 24 bits opnieuw in vier groepen van 6 bits.
  4. Lees elke 6-bits groep als een getal van 0 tot 63.
  5. Zoek dat getal op in het alfabet om één teken te krijgen.
  6. Als het laatste stukje bytes niet tot 3 reikt, vul de resterende bits aan met nullen en voeg "=" toe zodat elk blok 4 tekens blijft.

Stap 1. Zet elk teken om naar zijn 8-bits binaire waarde:

TekenASCII-codeBinair
L7601001100
o11101101111
g10301100111
t11601110100
o11101101111

Stap 2. Neem de eerste drie bytes, "Log", en verdeel dezelfde 24 bits opnieuw in vier 6-bits groepen:

8-bits bytes
01001100 01101111 01100111
6-bits groepen
010011 000110 111101 100111

Stap 3. Lees elke 6-bits groep als een getal en zoek het getal op in het alfabet:

6-bits groepWaardeBase64-teken
01001119T
0001106G
111101619
10011139n

"Logto" is 5 bytes, geen veelvoud van 3. De laatste twee bytes, "to", laten een verdeling van 6 + 6 + 4 over. Vul die laatste 4 bits aan met nullen om een 6-bits groep te vormen en voeg één "=" toe om het blok van 4 tekens te voltooien:

Voeg de blokken samen:

"Logto"  →  TG9ndG8=

Elke programmeertaal heeft dit ingebouwd. In Node.js:

const text = 'Logto';
const base64 = Buffer.from(text).toString('base64');
console.log(base64); // TG9ndG8=

Drie regels vloeien voort uit dat proces die het waard zijn te onthouden:

  • 3 in, 4 uit: De uitvoerlengte is de invoer afgerond naar een veelvoud van 4 tekens, dus gecodeerde gegevens zijn altijd ongeveer 33% groter.
  • "=" betekent opvulling: Het verschijnt alleen wanneer de invoer geen veelvoud van 3 bytes is.
  • Opvulling telt de resterende bytes: Geen "=" betekent een veelvoud van 3 bytes, één "=" betekent 2 resterende bytes, twee "=" betekent 1 resterende byte.

Wanneer moet u Base64 gebruiken?#

Gebruik Base64 wanneer binaire gegevens door een tekst-enkel kanaal moeten:

  • Ingesloten bestanden: Sluit een kleine afbeelding of lettertype in HTML/CSS in om een verzoek te besparen.
  • Tekst-enkel transporten: Zet binaire gegevens in JSON, XML of een URL-queryparameter.
  • Beperkte tekens: Verplaats gegevens door systemen die moeite hebben met besturings-bytes.

Wat u ervoor terugkrijgt:

  • Het werkt overal: Elk ASCII-geschikt systeem kan het lezen, zonder tekensetonderhandeling.
  • Niets raakt beschadigd: De uitvoer overleeft kanalen die anders ruwe bytes zouden beschadigen.

URL-veilige Base64 (Base64URL)#

Standaard Base64 maakt gebruik van drie tekens die conflicteren met de werking van URL's, queryreeksen en bestandsnamen: +, / en de =-opvulling. Zet een normale Base64-tekenreeks in een koppeling en het kan op stille manieren mislukken:

  • + wordt een spatie. In een queryreeks lezen veel servers + als een spatie. Dus ?data=ab+cd komt stilzwijgend aan als "ab cd", en de bytes kloppen niet.
  • / is een padscheidingsteken. Een / in een waarde kan worden gelezen als een nieuw padsegment, en de meeste bestandssystemen weigeren het direct in een bestandsnaam.
  • = is ook gereserveerd. Het scheidt sleutels van waarden in een queryreeks, waardoor afsluitende =-opvulling wordt weggelaten of verkeerd gelezen.

U kunt ze procentcoderen (+ wordt %2B, / wordt %2F, = wordt %3D), maar dat maakt de tekenreeks groter en is eenvoudig per ongeluk dubbel te coderen.

Base64URL (RFC 4648 §5) lost dit aan de bron op: vervang + door -, vervang / door _, en laat de =-opvulling weg. Het resultaat kan direct in een URL, queryparameter of bestandsnaam worden gebruikt zonder iets te escapen. U zult het zien in URL's, bestandsnamen en veel web-API's.

const base64 = 'TG9ndG8=';
const urlSafe = base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
console.log(urlSafe); // TG9ndG8

Beperkingen (en één groot misverstand)#

Base64 is een weergave, geen gratis lunch. Houd drie dingen in gedachten:

  • Het is ~33% groter: 3 bytes worden 4 tekens, dus gecodeerde gegevens zwellen met ongeveer een derde op.
  • Het kost CPU-capaciteit: Coderen en decoderen zijn niet gratis bij hoog volume of grote payloads.
  • Het is onleesbaar: Ondoorzichtige tekenreeksen maken logboeken en foutopsporing moeilijker.
Base64 is geen versleuteling. Dit is de fout die mensen het vaakst maken. Base64 verbergt niets. Iedereen kan het in één regel decoderen. Als de gegevens gevoelig zijn, versleutel ze dan. Base64 verandert alleen de vorm, nooit wie het kan lezen.

Veelgestelde vragen#

Is Base64 versleuteling of veilig?

Nee. Het is omkeerbare codering met een openbaar alfabet, dus iedereen kan het direct decoderen en het voegt nul vertrouwelijkheid toe. Versleutel gevoelige gegevens in plaats daarvan.

Waarom is mijn Base64-tekenreeks ongeveer 33% groter?

Base64 zet elke 3 bytes om in 4 tekens, waardoor de gecodeerde vorm altijd ongeveer een derde groter is dan de originele bytes.

Wat betekenen de "="-tekens aan het einde?

Het zijn opvultekens die de uitvoer een veelvoud van 4 tekens houden. Één "=" betekent dat de invoer 2 resterende bytes had; twee "=" betekent 1; geen "=" betekent dat de lengte al een veelvoud van 3 bytes was.

Wat is het verschil tussen Base64 en Base64URL?

Base64URL is dezelfde codering met een URL- en bestandsnaamveilig alfabet: - en _ vervangen + en /, en de =-opvulling wordt doorgaans weggelaten. Het is gebruikelijk in URL's, bestandsnamen en veel web-API's.

Kan Base64 elk bestand coderen, of alleen tekst?

Elke binaire inhoud: afbeeldingen, PDF's, sleutels, uitvoerbare bestanden. Base64 werkt op ruwe bytes, dus het originele inhoudstype maakt niet uit.

Stuurt dit hulpmiddel mijn gegevens ergens naartoe?

Nee. Coderen en decoderen worden volledig in uw browser uitgevoerd. Niets wat u plakt wordt geüpload of geregistreerd.

Ontgrendel meer met Logto Cloud