Base64-validerare

Klistra in en sträng för att ta reda på om den är giltig Base64. Valideraren anger varianten, pekar ut ogiltiga tecken och problem med utfyllnaden, och berättar vad datan avkodas till.

Körs helt i din webbläsare. Inget laddas upp.

Så använder du verktyget

  1. Klistra in strängen du vill kontrollera i indatafältet.
  2. Läs resultatet: giltig eller ogiltig, identifierad variant (standard eller URL-säker) och avkodad storlek.
  3. Om problem listas kan du använda de angivna positionerna för att hitta ogiltiga tecken, blanktecken eller felplacerad utfyllnad.
  4. Titta på den identifierade innehållstypen för att se om datan är text eller en fil som PNG, PDF eller ZIP.

Vad som gör Base64 giltig

  • Alfabet. Bara A-Z, a-z, 0-9 och två ytterligare tecken är tillåtna: + och / i standard-Base64, - och _ i Base64URL. En sträng som blandar båda paren har oftast skadats eller satts ihop från två källor.
  • Utfyllnad. Tecknet = får bara förekomma i slutet, och högst två gånger. Utfyllnad mitt i strängen betyder oftast att två kodade värden har slagits ihop.
  • Längd. Med utfyllnad är längden en multipel av 4. Utan utfyllnad fungerar alla längder utom 4n + 1: ett ensamt överblivet tecken rymmer bara 6 bitar, vilket inte räcker till en byte.

Strikta avkodare har ytterligare en regel: de oanvända låga bitarna i det sista tecknet måste vara noll. Många avkodare ignorerar de bitarna, men vissa, som Gos base64.StdEncoding.Strict(), avvisar strängen.

Vanliga fel och hur du åtgärdar dem

ProblemVanlig orsakÅtgärd
Ogiltigt teckenCitattecken, omvända snedstreck eller sekvenser som %2B och %3D som har kopierats med värdetTa bort de extra tecknen eller URL-avkoda först
Mellanslag mitt i strängen+ har blivit mellanslag när värdet passerat en URL eller ett formulärSätt tillbaka +, eller använd Base64URL i URL:er
Längd på 4n + 1Värdet har kapats av en kolumngräns, en loggrad eller en ofullständig kopieringKopiera hela värdet igen
Utfyllnad mitt i strängenTvå Base64-strängar har slagits ihopDela upp strängen och avkoda varje del för sig
RadbrytningarRadbrytning enligt MIME eller PEMOftast ofarligt; ta bort dem där en enda rad krävs

Giltig betyder inte meningsfull

Base64 har varken huvud eller kontrollsumma, så giltighet säger bara att en sträng går att avkoda. Många vanliga ord klarar testet: fyra valfria bokstäver bildar en giltig grupp. Därför avkodar valideraren också datan och rapporterar dess storlek och innehållstyp. Läsbar text eller en känd filsignatur som PNG, PDF eller ZIP är ett starkt tecken på att strängen verkligen är Base64; en handfull slumpmässiga byte är det inte. Vill du testa andra kodningar också kan du prova kodningsidentifieraren.

Validera Base64 i kod

// JavaScript: standard-Base64 med utfyllnad (matchar även en tom sträng)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/

# Python: kasta ett fel i stället för att hoppa över ogiltiga tecken
import base64, binascii
try:
    base64.b64decode(s, validate=True)
except binascii.Error:
    print('invalid')

Vanliga frågor

Varför rapporteras ett vanligt ord som giltig Base64?
För att det är giltigt. Varje följd av alfabetstecken med lämplig längd avkodas till några byte; ordet test avkodas till exempel till tre byte. Titta på den identifierade innehållstypen: om resultatet varken är läsbar text eller en känd filtyp var indatan troligen aldrig Base64.
Är Base64 med mellanslag eller radbrytningar giltig?

MIME och PEM delar upp Base64 i rader, och de flesta avkodare hoppar över blanktecken. JSON-fält, HTTP-headers, JWT:er och data URI:er förväntar sig däremot en enda obruten sträng. Valideraren listar blanktecken separat så att du kan avgöra om det spelar någon roll där strängen ska användas.

Är Base64 utan utfyllnad med = giltig?
Ofta, ja. Base64URL utelämnar normalt utfyllnaden, och RFC 4648 tillåter att den utelämnas när längden framgår av sammanhanget. Vissa strikta avkodare kräver den ändå; lägg till =-tecken tills längden är en multipel av 4 om ett system avvisar strängen. Strängar utan utfyllnad med 4n + 1 tecken är aldrig giltiga.
Hur kontrollerar jag om en sträng är Base64 i JavaScript?
För strikt Base64 med utfyllnad testar du strängen mot ett reguljärt uttryck som tillåter grupper om fyra alfabetstecken följda av valfri utfyllnad. Ett snabbare sätt är att anropa atob() inuti try/catch. Observera att atob() kastar ett InvalidCharacterError vid felaktig indata men tyst accepterar blanktecken och saknad utfyllnad, och att den inte accepterar de URL-säkra tecknen.