Base64 Decode Python — b64decode() Guide

·Backend Developer·Granskad avDmitri Volkov·Publicerad

Använd det kostnadsfria Base64 Decode Online direkt i webbläsaren — ingen installation krävs.

Prova Base64 Decode Online online →

När ett API returnerar ett content-fält som ser ut som eyJob3N0IjogImRiLXByb2Qi…, eller din secrets manager överlämnar en kodad credential, eller du behöver extrahera en JWT-nyttolast — är Python base64 decode ditt första stopp. Den inbyggda base64-modulen hanterar allt detta, men de små detaljerna kring bytes vs. strängar, URL-säkra alfabet och saknad utfyllnad drabbar nästan varje utvecklare åtminstone en gång — jag har debuggat den här kategorin av fel i kodgranskningar fler gånger än jag gärna erkänner. Den här guiden täcker base64.b64decode(), urlsafe_b64decode(), automatisk utfyllnadsreparation, avkodning från filer och HTTP-svar, CLI-verktyg, indatavalidering och fyra vanliga misstag med före/efter-korrigeringar — alla körbara Python 3.8+-exempel. Om du bara behöver en snabb engångsavkodning utan att skriva kod, ToolDecks Base64 Decoder hanterar både standard och URL-säker Base64 direkt i din webbläsare.

  • base64.b64decode(s) är inbyggd i Pythons standardbibliotek — ingen installation krävs; returnerar alltid bytes, aldrig str.
  • Kedja .decode("utf-8") efter b64decode() för att konvertera bytes till en Python-sträng — funktionen känner inte till den ursprungliga textkodningen.
  • För URL-säker Base64 (använder - och _ istället för + och /), använd base64.urlsafe_b64decode() — standard i JWT:ar, OAuth-tokens och Google API-credentials.
  • Åtgärda det vanliga "Incorrect padding"-felet med: padded = s + "=" * (-len(s) % 4) — lägger till 0, 1 eller 2 tecken efter behov.
  • Sätt validate=True för indata från externa källor för att generera binascii.Error vid icke-Base64-tecken istället för att tyst ignorera dem.

Vad är Base64-avkodning?

Base64 är ett kodningsschema som representerar godtycklig binärdata som en sträng av 64 utskrivbara ASCII-tecken: A–Z, a–z, 0–9, + och /, med = som utfyllnad. Varje 4 Base64-tecken kodar exakt 3 originalbytes, så den kodade formen är ungefär 33 % större än källan. Avkodning vänder processen — transformerar ASCII-representationen tillbaka till de ursprungliga bytesen.

Base64 krypterar inte data. Det är en ren binär-till-text-kodning — den kodade strängen är fullt läsbar av alla som kör den genom en avkodare:

Före — Base64-kodat

eyJob3N0IjogImRiLXByb2QubXljb21wYW55LmludGVybmFsIiwgInBvcnQiOiA1NDMyLCAidXNlciI6ICJhcHBfc3ZjIn0=

Efter — avkodat

{"host": "db-prod.mycompany.internal", "port": 5432, "user": "app_svc"}

base64.b64decode() — Avkodning med standardbiblioteket

Pythons base64-modul levereras med standardbiblioteket — ingen installation, alltid tillgänglig. Den primära funktionen är base64.b64decode(s, altchars=None, validate=False). Den accepterar en str, bytes eller bytearray, och returnerar alltid bytes.

Minimalt fungerande exempel

Python 3.8+
import base64
import json

# Encoded database config received from a secrets manager
encoded_config = (
    "eyJob3N0IjogImRiLXByb2QubXljb21wYW55LmludGVybmFsIiwgInBvcnQiOiA1NDMyLCAid"
    "XNlciI6ICJhcHBfc3ZjIiwgInBhc3N3b3JkIjogInM0ZmVQYXNzITIwMjYifQ=="
)

# Step 1: decode Base64 bytes
raw_bytes = base64.b64decode(encoded_config)
print(raw_bytes)
# b'{"host": "db-prod.mycompany.internal", "port": 5432, "user": "app_svc", "password": "s4fePass!2026"}'

# Step 2: convert bytes → str
config_str = raw_bytes.decode("utf-8")

# Step 3: parse into a dict
config = json.loads(config_str)
print(config["host"])    # db-prod.mycompany.internal
print(config["port"])    # 5432
Obs!b64decode() returnerar alltid bytes — aldrig en sträng. Om originaldatan var text, kedja .decode("utf-8"). Om det var binärdata (en bild, en PDF, ett gzip-arkiv), behåll bytesen som de är och skriv dem till en fil eller skicka dem direkt till det konsumerande biblioteket.

Utökat exempel: sort_keys, ensure_ascii och strikt validering

Python 3.8+
import base64
import binascii

# Token from an internal event bus — validate strictly (external input)
encoded_event = (
    "eyJldmVudCI6ICJvcmRlci5zaGlwcGVkIiwgIm9yZGVyX2lkIjogIk9SRC04ODQ3MiIsICJ"
    "0aW1lc3RhbXAiOiAiMjAyNi0wMy0xM1QxNDozMDowMFoiLCAicmVnaW9uIjogImV1LXdlc3QtMSJ9"
)

try:
    # validate=True raises binascii.Error on any non-Base64 character
    raw = base64.b64decode(encoded_event, validate=True)
    event = raw.decode("utf-8")
    print(event)
    # {"event": "order.shipped", "order_id": "ORD-88472", "timestamp": "2026-03-13T14:30:00Z", "region": "eu-west-1"}

except binascii.Error as exc:
    print(f"Invalid Base64: {exc}")
except UnicodeDecodeError as exc:
    print(f"Not UTF-8 text: {exc}")

Avkoda URL-säker Base64 (base64url)

Standard-Base64 använder + och /, som är reserverade tecken i URL:er. Den URL-säkra varianten (RFC 4648 §5, också kallad “base64url”) ersätter dem med - och _. Detta är kodningen som används i JWT-tokens, OAuth 2.0 PKCE-utmaningar, Google Cloud-credentials och de flesta moderna webbautentiseringsflöden.

Att skicka URL-säker Base64 till b64decode() utan att justera alfabetet kommer att tyst korrumpera data eller generera binascii.Error. Använd base64.urlsafe_b64decode() istället — det hanterar substitutionen -+ och _/ automatiskt.

Python 3.8+
import base64
import json

# JWT payload segment (the middle part between the two dots)
# JWTs use URL-safe Base64 without trailing "=" padding
jwt_payload_b64 = (
    "eyJ1c2VyX2lkIjogMjg5MywgInJvbGUiOiAiYWRtaW4iLCAiaXNzIjogImF1dGgubXljb21w"
    "YW55LmNvbSIsICJleHAiOiAxNzQwOTAwMDAwLCAianRpIjogImFiYzEyMzQ1LXh5ei05ODc2In0"
)

# Restore padding before decoding (JWT deliberately omits '=')
padded = jwt_payload_b64 + "=" * (-len(jwt_payload_b64) % 4)

payload_bytes = base64.urlsafe_b64decode(padded)
payload = json.loads(payload_bytes.decode("utf-8"))

print(payload["role"])    # admin
print(payload["iss"])     # auth.mycompany.com
print(payload["user_id"]) # 2893
Obs!Uttrycket "=" * (-len(s) % 4) lägger till exakt 0, 1 eller 2 utfyllnadstecken efter behov och är en no-op när strängen redan är korrekt utfylld. Det är den idiomatiska Python-lösningen för JWT- och OAuth-utfyllnadsproblem.

base64.b64decode() — Parameterreferens

Alla parametrar nedan gäller för både b64decode() och urlsafe_b64decode(), förutom altchars som bara är tillgänglig på b64decode().

ParameterTypStandardBeskrivning
sbytes | str | bytearrayDen Base64-kodade indatan att avkoda; ASCII-str accepteras bredvid bytes-typer.
altcharsbytes | NoneNoneEn 2-bytes sekvens som substituerar + och /; möjliggör anpassade Base64-alfabet utöver standardvarianten för URL-säkerhet.
validateboolFalseNär True genereras binascii.Error vid varje tecken utanför Base64-alfabetet; när False ignoreras icke-alfabet-bytes (radbrytningar, mellanslag) tyst.

Standardvärdet validate=False är avsiktligt för PEM-formaterad data och flerradig Base64 (där radbrytningar är vanliga). För API-nyttolaster, användaruppladdningar eller opålitlig indata, skicka validate=True för att fånga upp korrupt eller injicerad data tidigt och visa ett tydligt fel.

Python Base64 Decode Utfyllnadsfel — Hur man åtgärdar det

Det vanligaste felet vid avkodning av Base64 i Python är:

Python 3.8+
import base64

base64.b64decode("eyJ0eXBlIjogImFjY2VzcyJ9")
# binascii.Error: Incorrect padding

Base64 kräver stränglängder som är multipler av 4. När data passerar genom URL:er, HTTP-huvuden eller JWT-bibliotek, tas den avslutande =utfyllnaden bort för att spara bytes. Det finns två tillförlitliga sätt att åtgärda detta.

Alternativ 1: Återställ utfyllnad inline (rekommenderat)

Python 3.8+
import base64
import json

def b64decode_unpadded(data: str | bytes) -> bytes:
    """Decode Base64 with automatic padding correction."""
    if isinstance(data, str):
        data = data.encode("ascii")
    data += b"=" * (-len(data) % 4)
    return base64.b64decode(data)

# Works regardless of how many '=' were stripped
token_a = "eyJ0eXBlIjogImFjY2VzcyJ9"       # 0 chars of padding stripped
token_b = "eyJ0eXBlIjogInJlZnJlc2gifQ"      # 1 char stripped
token_c = "eyJ0eXBlIjogImFwaV9rZXkifQ=="    # already padded

for token in (token_a, token_b, token_c):
    result = json.loads(b64decode_unpadded(token).decode("utf-8"))
    print(result["type"])
# access
# refresh
# api_key

Alternativ 2: URL-säker avkodning med utfyllnad för OAuth / JWT

Python 3.8+
import base64
import json

def decode_jwt_segment(segment: str) -> dict:
    """Decode a single JWT segment (header or payload)."""
    # Add padding, use URL-safe alphabet
    padded = segment + "=" * (-len(segment) % 4)
    raw = base64.urlsafe_b64decode(padded)
    return json.loads(raw.decode("utf-8"))

# Google OAuth ID token payload (simplified)
id_token_payload = (
    "eyJzdWIiOiAiMTEwNTY5NDkxMjM0NTY3ODkwMTIiLCAiZW1haWwiOiAic2FyYS5jaGVuQGV4"
    "YW1wbGUuY29tIiwgImhkIjogImV4YW1wbGUuY29tIiwgImlhdCI6IDE3NDA5MDAwMDB9"
)

claims = decode_jwt_segment(id_token_payload)
print(claims["email"])   # sara.chen@example.com
print(claims["hd"])      # example.com

Avkoda Base64 från en fil och API-svar

Läsa Base64 från disk och avkoda API-nyttolaster är de två vanligaste produktionsscenarierna. Båda kräver ordentlig felhantering — korrupt utfyllnad och oväntade binärtyper är verkliga förekomster, inte teoretiska gränsfall.

Läsa och avkoda en Base64-fil

Python 3.8+
import base64
import json
from pathlib import Path

def decode_attachment(envelope_path: str, output_path: str) -> None:
    """
    Read a JSON envelope with a Base64-encoded attachment,
    decode it, and write the binary output to disk.
    """
    try:
        envelope = json.loads(Path(envelope_path).read_text(encoding="utf-8"))
        encoded_data = envelope["attachment"]["data"]
        file_bytes = base64.b64decode(encoded_data, validate=True)
        Path(output_path).write_bytes(file_bytes)
        print(f"Saved {len(file_bytes):,} bytes → {output_path}")
    except FileNotFoundError:
        print(f"Envelope file not found: {envelope_path}")
    except (KeyError, TypeError):
        print("Unexpected envelope structure — 'attachment.data' missing")
    except base64.binascii.Error as exc:
        print(f"Invalid Base64 content: {exc}")

# Example envelope:
# {"attachment": {"filename": "invoice_2026_03.pdf", "data": "JVBERi0xLjQK..."}}
decode_attachment("order_ORD-88472.json", "invoice_2026_03.pdf")

Avkoda Base64 från ett HTTP API-svar

Python 3.8+
import base64
import json
import urllib.request

def fetch_and_decode_secret(vault_url: str, secret_name: str) -> str:
    """
    Retrieve a Base64-encoded secret from an internal vault API
    and return the decoded plaintext value.
    """
    url = f"{vault_url}/v1/secrets/{secret_name}"
    req = urllib.request.Request(url, headers={"X-Vault-Token": "s.internal"})

    try:
        with urllib.request.urlopen(req, timeout=5) as resp:
            body = json.loads(resp.read().decode("utf-8"))
            # Vault returns: {"data": {"value": "<base64>", "encoding": "base64"}}
            encoded = body["data"]["value"]
            return base64.b64decode(encoded).decode("utf-8")

    except urllib.error.URLError as exc:
        raise RuntimeError(f"Vault unreachable: {exc}") from exc
    except (KeyError, UnicodeDecodeError, base64.binascii.Error) as exc:
        raise ValueError(f"Unexpected secret format: {exc}") from exc

# db_pass = fetch_and_decode_secret("https://vault.internal", "db-prod-password")
# print(db_pass)  # s4feP@ss!2026
Obs!Om du använder requests-biblioteket, ersätt urllib.request med resp = requests.get(url, timeout=5, headers=headers) och body = resp.json(). Base64-avkodningslogiken är identisk.

Base64-avkodning via kommandoraden

För snabb terminalinspektion — verifiera en token, titta in i en kodad konfigblob, eller leda API-utdata genom en avkodare — är base64-kommandot tillgängligt på Linux och macOS. Pythons inbyggda -m base64-modul fungerar plattformsoberoende inklusive Windows.

Bash
# Decode a Base64 string and print the result (Linux / macOS)
echo "eyJob3N0IjogImRiLXByb2QubXljb21wYW55LmludGVybmFsIn0=" | base64 --decode
# {"host": "db-prod.mycompany.internal"}

# Decode a file, save decoded output
base64 --decode encoded_payload.txt > decoded_output.json

# Python's cross-platform CLI decoder (works on Windows too)
python3 -m base64 -d encoded_payload.txt

# Decode a JWT payload segment inline — strip header/signature first
echo "eyJ1c2VyX2lkIjogMjg5MywgInJvbGUiOiAiYWRtaW4ifQ" | python3 -c "
import sys, base64, json
s = sys.stdin.read().strip()
padded = s + '=' * (-len(s) % 4)
print(json.dumps(json.loads(base64.urlsafe_b64decode(padded)), indent=2))
"

För utforskande arbete där det känns överdrivet att skriva en skalledning, klistra in strängen i den online Base64 Decoder — den identifierar automatiskt URL-säker indata och reparerar utfyllnad direkt.

Validera Base64-indata före avkodning

När Base64-data anländer från användarindata, en webhook eller ett opålitligt tredjeparts-API, validera det före avkodning för att visa tydliga, användbara fel istället för förvirrande binascii.Error-traceback djupt inne i affärslogiken. Python ger dig två tillvägagångssätt: fånga undantag eller förvalidera med ett regex.

Python 3.8+
import base64
import binascii
import re

# ── Option A: try/except (recommended for most code paths) ──────────────────

def safe_b64decode(data: str) -> bytes | None:
    """Return decoded bytes, or None if the input is not valid Base64."""
    try:
        padded = data + "=" * (-len(data) % 4)
        return base64.b64decode(padded, validate=True)
    except (binascii.Error, ValueError):
        return None

print(safe_b64decode("not-base64!!"))                     # None
print(safe_b64decode("eyJ0eXBlIjogInJlZnJlc2gifQ"))      # b'{"type": "refresh"}'


# ── Option B: regex pre-validation ──────────────────────────────────────────

# Standard Base64 (alphabet: A-Z a-z 0-9 + /)
_STANDARD_RE = re.compile(r"^[A-Za-z0-9+/]*={0,2}$")

# URL-safe Base64 (alphabet: A-Z a-z 0-9 - _)
_URLSAFE_RE = re.compile(r"^[A-Za-z0-9-_]*={0,2}$")

def is_valid_base64(s: str) -> bool:
    """True if s is a syntactically valid standard Base64 string."""
    # Length must be a multiple of 4 for fully padded strings
    stripped = s.rstrip("=")
    padded = stripped + "=" * (-len(stripped) % 4)
    return bool(_STANDARD_RE.match(padded))

print(is_valid_base64("SGVsbG8gV29ybGQ="))   # True
print(is_valid_base64("SGVsbG8gV29ybGQ!"))   # False  (! is not Base64)

Högpresterande alternativ: pybase64

För den stora majoriteten av användningsfall är Pythons stdlib base64-modul helt tillräcklig. Om du behandlar tusentals API-nyttolaster per sekund, avkodar multi-megabyte binära bilagor i en tight loop, eller din profilerare visar Base64-operationer som en flaskhals — överväg pybase64. Det är ett C-tilläggsomslagsprogram runt libbase64 och är typiskt 2–5× snabbare än stdlib-implementationen på stora indata.

Bash
pip install pybase64
Python 3.8+
import pybase64

# Drop-in replacement — identical API to the stdlib base64 module
encoded_image = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12NgAAIABQ..."

image_bytes = pybase64.b64decode(encoded_image, validate=False)
print(f"Decoded {len(image_bytes):,} bytes")

# URL-safe variant — same as base64.urlsafe_b64decode()
token_bytes = pybase64.urlsafe_b64decode("eyJpZCI6IDQ3MX0=")
print(token_bytes)  # b'{"id": 471}'

# Benchmark note: on strings under ~10 KB the function-call overhead dominates
# and the speedup is negligible. Profile before switching.

API:et är avsiktligt identiskt med base64 — byt import och ingenting annat förändras. Använd det bara när profilering bekräftar att Base64 faktiskt är en flaskhals, vilket är ovanligt utanför genomströmningsdatapipelines.

Vanliga misstag

Jag har sett dessa fyra fel i kodgranskningar upprepade gånger — de är särskilt vanliga bland utvecklare som kommer från språk som JavaScript eller PHP där Base64 decode returnerar en sträng direkt, eller från handledningar som hoppar över felhantering helt.

Misstag 1: Glömma att anropa .decode() på resultatet

Before · Python
After · Python
# ❌ b64decode() returns bytes — this crashes downstream
import base64

raw = base64.b64decode("eyJ1c2VyX2lkIjogNDcxLCAicm9sZSI6ICJhZG1pbiJ9")

# TypeError: byte indices must be integers or slices, not str
user_id = raw["user_id"]
# ✅ decode bytes → str, then parse
import base64, json

raw = base64.b64decode("eyJ1c2VyX2lkIjogNDcxLCAicm9sZSI6ICJhZG1pbiJ9")
payload = json.loads(raw.decode("utf-8"))
print(payload["user_id"])  # 471
print(payload["role"])     # admin

Misstag 2: Använda b64decode() på URL-säker Base64-indata

Before · Python
After · Python
# ❌ JWT and OAuth tokens use '-' and '_' — not in standard alphabet
import base64

jwt_segment = "eyJ1c2VyX2lkIjogMjg5M30"
# binascii.Error or silently wrong bytes — unpredictable behaviour
base64.b64decode(jwt_segment)
# ✅ use urlsafe_b64decode() for any token with '-' or '_'
import base64, json

jwt_segment = "eyJ1c2VyX2lkIjogMjg5M30"
padded = jwt_segment + "=" * (-len(jwt_segment) % 4)
data = base64.urlsafe_b64decode(padded)
print(json.loads(data.decode("utf-8")))
# {'user_id': 2893}

Misstag 3: Inte åtgärda utfyllnad på trunkerade tokens

Before · Python
After · Python
# ❌ JWTs and most URL-transmitted tokens strip '=' — this crashes
import base64

# Valid JWT payload segment — no padding, as per spec
segment = "eyJ0eXBlIjogImFjY2VzcyIsICJqdGkiOiAiMzgxIn0"
base64.urlsafe_b64decode(segment)
# binascii.Error: Incorrect padding
# ✅ add padding before every urlsafe_b64decode() call
import base64, json

segment = "eyJ0eXBlIjogImFjY2VzcyIsICJqdGkiOiAiMzgxIn0"
padded = segment + "=" * (-len(segment) % 4)
result = json.loads(base64.urlsafe_b64decode(padded).decode("utf-8"))
print(result["type"])  # access
print(result["jti"])   # 381

Misstag 4: Anropa .decode("utf-8") på binärdata

Before · Python
After · Python
# ❌ Binary files (PDF, PNG, ZIP) are not UTF-8 text — this crashes
import base64

# Base64-encoded PDF starts with JVBERi... (%PDF-)
pdf_b64 = "JVBERi0xLjQKJeLjz9MKNyAwIG9iago8PC9U..."
pdf_text = base64.b64decode(pdf_b64).decode("utf-8")
# UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2
# ✅ write binary directly to a file — no .decode() needed
import base64
from pathlib import Path

pdf_b64 = "JVBERi0xLjQKJeLjz9MKNyAwIG9iago8PC9U..."
pdf_bytes = base64.b64decode(pdf_b64)
Path("report_q1_2026.pdf").write_bytes(pdf_bytes)
print(f"Saved {len(pdf_bytes):,} bytes")

Avkoda stora Base64-filer i Python

Ladda en 200 MB Base64-fil med Path.read_text() och avkoda den i ett anrop allokerar den kodade strängen, de avkodade bytesen och eventuella mellanliggande representationer simultant — detta tömmer lätt minnet på begränsade servrar eller Lambda-funktioner. För filer större än ~50–100 MB, använd istället en chunk-baserad metod.

Chunk-baserad avkodning till disk (ingen fullständig RAM-laddning)

Python 3.8+
import base64

def decode_large_b64_file(input_path: str, output_path: str, chunk_size: int = 65536) -> None:
    """
    Decode a large Base64 file in chunks to avoid loading the entire encoded
    string into memory. chunk_size must be a multiple of 4 to keep Base64
    block boundaries aligned across reads.
    """
    assert chunk_size % 4 == 0, "chunk_size must be a multiple of 4"

    bytes_written = 0
    with open(input_path, "rb") as src, open(output_path, "wb") as dst:
        while True:
            chunk = src.read(chunk_size)
            if not chunk:
                break
            # Strip whitespace that may appear in wrapped/multiline Base64
            chunk = chunk.strip()
            if chunk:
                dst.write(base64.b64decode(chunk))
                bytes_written += len(chunk)

    print(f"Decoded {bytes_written:,} Base64 bytes → {output_path}")

# Example: decode a 300 MB database snapshot stored as Base64
decode_large_b64_file("snapshot_2026_03_13.b64", "snapshot_2026_03_13.sql.gz")

Avkoda Base64 med base64.decodebytes() för PEM / flerradig data

Python 3.8+
import base64

# base64.decodebytes() is designed for MIME / PEM Base64 that wraps at 76 chars.
# It silently ignores whitespace and newlines — perfect for certificate files.

with open("server_cert.pem", "rb") as f:
    pem_data = f.read()

# Strip PEM headers if present, then decode
lines = [
    line for line in pem_data.splitlines()
    if not line.startswith(b"-----")
]
raw_cert = base64.decodebytes(b"
".join(lines))
print(f"Certificate DER payload: {len(raw_cert):,} bytes")
Obs!Använd base64.decodebytes() för PEM-certifikat, MIME-bilagor och all Base64 som radbryter vid fasta radbredder. Använd chunk-metoden ovan för stora ogenomskinliga blobar (säkerhetskopior, mediafiler). För kompakta, enradiga tokens (JWT, OAuth), är b64decode() eller urlsafe_b64decode() alltid rätt val.

Python Base64-avkodningsmetoder — Snabb jämförelse

MetodAlfabetUtfyllnadUtdataKräver installationBäst för
base64.b64decode()Standard (A–Z a–z 0–9 +/)KrävsbytesNej (stdlib)Allmänt, e-post, PEM
base64.decodebytes()Standard (A–Z a–z 0–9 +/)Ignoreras (tar bort blanksteg)bytesNej (stdlib)PEM-certifikat, MIME-bilagor, flerradig Base64
base64.urlsafe_b64decode()URL-säker (A–Z a–z 0–9 -_)KrävsbytesNej (stdlib)JWT, OAuth, Google Cloud APIs
base64.b32decode()32 tecken (A–Z, 2–7)KrävsbytesNej (stdlib)TOTP-hemligheter, DNS-säkra ID:n
base64.b16decode()Hex (0–9, A–F)IngenbytesNej (stdlib)Hex-kodade kontrollsummor, hashar
pybase64.b64decode()Standard (A–Z a–z 0–9 +/)KrävsbytesJa (pip)Genomströmningspipelines, stora nyttolaster
CLI: base64 --decodeStandardAutomatiskstdoutNej (system)Snabb terminalinspektion

Använd b64decode() som standard. Byt till urlsafe_b64decode()så snart du ser - eller _ i indata — dessa tecken är det omistakliga tecknet på URL-säker Base64. Grip efter pybase64 bara efter att profilering bekräftar en flaskhals. För engångskontroller under utveckling hanterar ToolDecks Base64 Decoder båda alfabeten och reparerar utfyllnad automatiskt — ingen Python-miljö behövs.

Vanliga frågor

Hur avkodar jag en Base64-sträng till en vanlig sträng i Python?

Anropa base64.b64decode(encoded) för att få bytes, anropa sedan .decode("utf-8")på resultatet för att få en Python-str. De två stegen är alltid separata eftersom b64decode() bara vänder Base64-alfabetet — den vet inte om originalinnehållet var UTF-8, Latin-1 eller binärt. Om datan använder en icke-UTF-8-kodning, skicka rätt codec-namn till .decode(), till exempel .decode("latin-1").

Varför får jag “Incorrect padding” när jag avkodar Base64 i Python?

Base64-strängar måste vara ett multipel av 4 tecken långa. JWT:ar, OAuth-tokens och data som sänds i URL:er tar ofta bort den avslutande =-utfyllnaden. Åtgärda det genom att lägga till "=" * (-len(s) % 4) före avkodning. Denna formel lägger till exakt 0, 1 eller 2 tecken efter behov, och är en säker no-op när strängen redan är korrekt utfylld.

Vad är skillnaden mellan b64decode() och urlsafe_b64decode() i Python?

Båda avkodar samma Base64-algoritm men med olika alfabet för det 62:a och 63:e tecknet.b64decode() använder + och /; urlsafe_b64decode() använder - och _. Den URL-säkra varianten är definierad i RFC 4648 §5 och används där Base64 måste överleva i URL:er, HTTP-huvuden eller cookie-värden utan procentkodning. Att blanda ihop dem orsakar antingen ett binascii.Error eller tyst korrupt utdata.

Hur avkodar jag en Base64-kodad bild i Python?

Avkoda till bytes med base64.b64decode(encoded), skriv sedan dessa bytes direkt till en fil — anropa inte .decode("utf-8") på bilddata. Om indatan är en data-URL (t.ex. data:image/png;base64,iVBORw0KGgo…), ta bort prefixet först:

Python 3.8+
import base64
from pathlib import Path

# Data URL from an <img src="..."> or an API response
data_url = (
    "data:image/png;base64,"
    "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12NgAAIABQ=="
)

# Split off the "data:image/png;base64," prefix
_, encoded = data_url.split(",", 1)
image_bytes = base64.b64decode(encoded)
Path("avatar_elindqvist.png").write_bytes(image_bytes)
print(f"Saved {len(image_bytes)} bytes")

Kan jag avkoda Base64 i Python utan att importera något modul?

Tekniskt sett ja, men det finns ingen anledning till det. base64-modulen är en del av Pythons standardbibliotek, alltid tillgänglig, alltid installerad — den har inga beroenden och dess funktioner är implementerade i C. Att återimplementera Base64 från grunden skulle vara långsammare, mer felbenäget och svårare att underhålla. Använd alltid import base64.

Hur avkodar jag Base64 i Python när indatan är bytes, inte en sträng?

base64.b64decode() accepterar str, bytes och bytearray omväxlande — ingen konvertering krävs. Om du tar emot b"SGVsbG8=" från ett uttag eller filläsning, skicka det direkt. Utfyllnadsreparation fungerar på samma sätt med bytes: data + b"=" * (-len(data) % 4) i bytes-läge.

Relaterade verktyg

  • Base64 Encode — koda text eller binärfiler till Base64 direkt; användbart för att generera testfixtures för din Python-avkodningskod utan att köra ett skript.
  • JWT Decoder — inspektera JWT-huvud och -nyttolast utan att skriva kod; nyttolasten avkodas med URL-säker Base64 under huven, precis som visas i exemplen ovan.
  • URL Decode — procentavkoda query-strängar och sökvägssegment; ofta behövs vid sidan av Base64-avkodning när OAuth-callback-URL:er eller webhook-nyttolaster parsas.
  • URL Encode — procentkoda specialtecken; praktiskt när du behöver bädda in ett Base64-kodat värde säkert inuti en URL-frågeparameter.
Finns även på:JavaScriptGoJavaC#
MS
Maria SantosBackend Developer

Maria is a backend developer specialising in Python and API integration. She has broad experience with data pipelines, serialisation formats, and building reliable server-side services. She is an active member of the Python community and enjoys writing practical, example-driven guides that help developers solve real problems without unnecessary theory.

DV
Dmitri VolkovTeknisk granskare

Dmitri is a DevOps engineer who relies on Python as his primary scripting and automation language. He builds internal tooling, CI/CD pipelines, and infrastructure automation scripts that run in production across distributed teams. He writes about the Python standard library, subprocess management, file processing, encoding utilities, and the practical shell-adjacent Python that DevOps engineers use every day.