Base64-validator

Plak een string om te zien of het geldige Base64 is. De validator benoemt de variant, wijst ongeldige tekens en problemen met de opvulling aan en vertelt je waar de gegevens naar decoderen.

Werkt volledig in je browser. Er wordt niets geüpload.

Zo gebruik je het

  1. Plak de string die je wilt controleren in het invoerveld.
  2. Lees het oordeel: geldig of ongeldig, de herkende variant (standaard of URL-veilig) en de gedecodeerde grootte.
  3. Staan er punten onder Problemen, gebruik dan de gemelde posities om ongeldige tekens, witruimte of misplaatste opvulling te vinden.
  4. Bekijk bij Inhoud het herkende type om te zien of de gegevens tekst zijn of een bestand zoals PNG, PDF of ZIP.

Waaraan geldige Base64 voldoet

  • Alfabet. Alleen A-Z, a-z, 0-9 en nog twee tekens zijn toegestaan: + en / in standaard-Base64, - en _ in Base64URL. Een string waarin beide paren door elkaar staan, is meestal beschadigd of uit twee bronnen samengesteld.
  • Opvulling. Het teken = mag alleen aan het eind staan, en hoogstens twee keer. Opvulling in het midden betekent meestal dat twee gecodeerde waarden aan elkaar zijn geplakt.
  • Lengte. Met opvulling is de lengte een veelvoud van 4. Zonder opvulling is elke lengte goed behalve 4n + 1: één overgebleven teken bevat maar 6 bits, niet genoeg voor een byte.

Strikte decoders hanteren nog één regel: de ongebruikte lage bits van het laatste teken moeten nul zijn. Veel decoders negeren die bits, maar sommige, zoals base64.StdEncoding.Strict() in Go, weigeren de string dan.

Veelvoorkomende fouten en hoe je ze oplost

ProbleemTypische oorzaakOplossing
Ongeldig tekenAanhalingstekens, backslashes of escapes als %2B en %3D die met de waarde zijn meegekopieerdVerwijder de extra tekens of URL-decodeer eerst
Spaties in het midden+ is omgezet in spaties toen de waarde via een URL of formulier werd doorgegevenZet de + terug, of gebruik Base64URL voor URL's
Lengte van 4n + 1Waarde afgekapt door een kolomlimiet, een logregel of een onvolledige kopieKopieer de volledige waarde opnieuw
Opvulling in het middenTwee Base64-strings aan elkaar geplaktSplits ze en decodeer elk deel afzonderlijk
RegeleindenMIME- of PEM-regelafbrekingMeestal onschuldig; verwijder ze waar één regel vereist is

Geldig betekent niet zinvol

Base64 heeft geen header en geen controlesom, dus geldigheid zegt alleen dat een string kan worden gedecodeerd. Veel gewone woorden komen erdoor: elke vier letters vormen een geldige groep. Daarom decodeert de validator de gegevens ook en meldt hij de grootte en het inhoudstype. Leesbare tekst of een bekende bestandssignatuur zoals PNG, PDF of ZIP is een sterke aanwijzing dat de string echt Base64 is; een handvol willekeurige bytes is dat niet. Wil je ook andere coderingen testen, probeer dan de coderingsdetector.

Base64 valideren in code

// JavaScript: standaard-Base64 met opvulling (komt ook overeen met een lege string)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/

# Python: geef een fout in plaats van ongeldige tekens over te slaan
import base64, binascii
try:
    base64.b64decode(s, validate=True)
except binascii.Error:
    print('invalid')

Veelgestelde vragen

Waarom wordt een gewoon woord als geldige Base64 gemeld?
Omdat het geldig is. Elke reeks alfabettekens met een geschikte lengte decodeert naar bepaalde bytes; het woord test decodeert bijvoorbeeld naar drie bytes. Kijk naar het herkende type bij Inhoud: is het resultaat leesbare tekst noch een bekend bestandstype, dan was de invoer waarschijnlijk nooit Base64.
Is Base64 met spaties of regeleinden geldig?

MIME en PEM breken Base64 af in regels, en de meeste decoders slaan witruimte over. JSON-velden, HTTP-headers, JWT's en data-URI's verwachten echter één ononderbroken string. De validator vermeldt witruimte apart, zodat je zelf kunt beoordelen of die van belang is op de plek waar de string wordt gebruikt.

Is Base64 zonder opvulling (=) geldig?
Vaak wel. Base64URL laat de opvulling normaal gesproken weg, en RFC 4648 staat toe dat die wordt weggelaten als de lengte uit de context bekend is. Sommige strikte decoders vereisen haar toch; voeg =-tekens toe tot de lengte een veelvoud van 4 is als een systeem de string weigert. Strings zonder opvulling met een lengte van 4n + 1 tekens zijn nooit geldig.
Hoe controleer ik in JavaScript of een string Base64 is?
Test de string voor strikte Base64 met opvulling tegen een reguliere expressie die groepen van vier alfabettekens toestaat, gevolgd door optionele opvulling. Sneller is atob() aanroepen binnen try/catch. Let op: atob() gooit een InvalidCharacterError bij ongeldige invoer, maar accepteert zonder melding witruimte en ontbrekende opvulling, en accepteert de URL-veilige tekens niet.