Base64 dekódování Python — b64decode()

·Backend Developer·ZkontrolovánoDmitri Volkov·Publikováno

Používejte bezplatný Base64 Decode Online přímo v prohlížeči — bez instalace.

Vyzkoušet Base64 Decode Online online →

Když API vrátí pole content vypadající jako eyJob3N0IjogImRiLXByb2Qi…, nebo váš správce tajemství předá zakódované přihlašovací údaje, nebo potřebujete extrahovat JWT payload — Python base64 decode je vaše první zastávka. Vestavěný modul base64 zvládne vše, ale malé detaily kolem bytes vs. stringů, URL-bezpečných abeced a chybějícího paddingu nachytají téměř každého vývojáře alespoň jednou — tuto kategorii chyb jsem ladil v code review víckrát, než bych rád přiznal. Tento průvodce pokrývá base64.b64decode(), urlsafe_b64decode(), automatickou opravu paddingu, dekódování ze souborů a HTTP odpovědí, CLI nástroje, validaci vstupu a čtyři časté chyby s opravami před/po — vše jsou spustitelné příklady pro Python 3.8+. Pokud potřebujete rychlé jednorázové dekódování bez psaní kódu, Base64 Decoder ToolDecku zpracuje standardní i URL-bezpečné Base64 okamžitě v prohlížeči.

  • base64.b64decode(s) je součástí standardní knihovny Pythonu — není potřeba instalace; vždy vrací bytes, nikoli str.
  • Řetězte .decode("utf-8") za b64decode() pro převod bytes na Python string — funkce nezná původní kódování textu.
  • Pro URL-bezpečné Base64 (používá - a _ místo + a /), použijte base64.urlsafe_b64decode() — standardní v JWT, OAuth tokenech a Google API přihlašovacích údajích.
  • Opravte častou chybu "Incorrect padding" pomocí: padded = s + "=" * (-len(s) % 4) — přidá 0, 1 nebo 2 znaky dle potřeby.
  • Nastavte validate=True pro vstup z externích zdrojů, aby se vyvolal binascii.Error u znaků mimo Base64, místo jejich tichého ignorování.

Co je Base64 dekódování?

Base64 je kódovací schéma, které reprezentuje libovolná binární data jako řetězec 64 tisknutelných ASCII znaků: A–Z, a–z, 0–9, + a /, přičemž = slouží jako výplň. Každé 4 Base64 znaky kódují přesně 3 původní bajty, takže zakódovaná forma je přibližně o 33 % větší než zdroj. Dekódování obrátí proces — transformuje ASCII reprezentaci zpět do původních bajtů.

Base64 data nešifruje. Je to čistě binárně-textové kódování — zakódovaný řetězec je plně čitelný pro každého, kdo ho spustí přes dekodér:

Před — Base64 zakódováno

eyJob3N0IjogImRiLXByb2QubXljb21wYW55LmludGVybmFsIiwgInBvcnQiOiA1NDMyLCAidXNlciI6ICJhcHBfc3ZjIn0=

Po — dekódováno

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

base64.b64decode() — Dekódování standardní knihovnou

Pythonův modul base64 je součástí standardní knihovny — žádná instalace, vždy k dispozici. Primární funkcí je base64.b64decode(s, altchars=None, validate=False). Přijímá str, bytes nebo bytearray a vždy vrací bytes.

Minimální funkční příklad

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
Poznámka:b64decode() vždy vrací bytes — nikdy string. Pokud původní data byla text, řetězte .decode("utf-8"). Pokud šlo o binární data (obrázek, PDF, gzip archiv), ponechte bajty tak jak jsou a zapište je do souboru nebo je předejte přímo konzumující knihovně.

Rozšířený příklad: sort_keys, ensure_ascii a přísná validace

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}")

Dekódování URL-bezpečného Base64 (base64url)

Standardní Base64 používá + a /, které jsou v URL rezervované znaky. URL-bezpečná varianta (RFC 4648 §5, také nazývaná “base64url”) je nahrazuje - a _. Toto kódování se používá v JWT tokenech, OAuth 2.0 PKCE výzvách, Google Cloud přihlašovacích údajích a většině moderních webových autentizačních toků.

Předání URL-bezpečného Base64 do b64decode() bez úpravy abecedy tiše poškodí data nebo vyvolá binascii.Error. Místo toho použijte base64.urlsafe_b64decode() — automaticky provede substituci -+ a _/.

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
Poznámka:Výraz "=" * (-len(s) % 4) přidá přesně 0, 1 nebo 2 znaky výplně dle potřeby a je no-op operací, když je řetězec již správně doplněn. Je to idiomatická oprava Pythonu pro problémy s paddingem JWT a OAuth.

Přehled parametrů base64.b64decode()

Všechny níže uvedené parametry platí pro b64decode() i urlsafe_b64decode(), kromě altchars, který je dostupný pouze u b64decode().

ParametrTypVýchozíPopis
sbytes | str | bytearrayBase64 zakódovaný vstup k dekódování; ASCII str je přijímán vedle typů bytes.
altcharsbytes | NoneNone2-bajtová sekvence nahrazující + a /; umožňuje vlastní Base64 abecedy nad rámec standardní URL-bezpečné varianty.
validateboolFalsePři hodnotě True vyvolá binascii.Error pro jakýkoli znak mimo Base64 abecedu; při False jsou bajty mimo abecedu (nové řádky, mezery) tiše ignorovány.

Výchozí hodnota validate=False je záměrná pro PEM formátovaná data a víceřádkové Base64 (kde jsou nové řádky běžné). Pro API payloady, nahrávání uživatelů nebo jakýkoli nedůvěryhodný vstup předejte validate=True, abyste zachytili poškozená nebo injektovaná data brzy a zobrazili jasnou chybu.

Chyba paddingu Python Base64 Decode — Jak ji opravit

Nejčastější chybou při dekódování Base64 v Pythonu je:

Python 3.8+
import base64

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

Base64 vyžaduje délky řetězců, které jsou násobky 4. Když data procházejí URL, HTTP hlavičkami nebo JWT knihovnami, je koncové =výplně odstraněno pro úsporu bajtů. Existují dva spolehlivé způsoby, jak to opravit.

Možnost 1: Obnovit padding inline (doporučeno)

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

Možnost 2: URL-bezpečné dekódování s paddingem pro 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

Dekódování Base64 ze souboru a API odpovědi

Čtení Base64 z disku a dekódování API payloadů jsou dva nejběžnější produkční scénáře. Oba si zaslouží správné ošetření chyb — poškozený padding a neočekávané binární typy jsou reálné výskyty, nikoli teoretické okrajové případy.

Čtení a dekódování Base64 souboru

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")

Dekódování Base64 z HTTP API odpovědi

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
Poznámka:Pokud používáte knihovnu requests, nahraďte urllib.request výrazem resp = requests.get(url, timeout=5, headers=headers) a body = resp.json(). Logika dekódování Base64 je identická.

Dekódování Base64 z příkazové řádky

Pro rychlou terminálovou inspekci — ověření tokenu, nahlédnutí do zakódovaného konfiguračního blobu nebo vedení výstupu API přes dekodér — je příkaz base64 dostupný na Linuxu a macOS. Pythonův vestavěný modul -m base64 funguje multiplatformně včetně 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))
"

Pro průzkumnou práci, kde psaní shell pipeline přijde jako zbytečné úsilí, vložte řetězec do online Base64 Decoderu — automaticky detekuje URL-bezpečný vstup a opraví padding za letu.

Validace vstupu Base64 před dekódováním

Když Base64 data přicházejí od uživatelského vstupu, webhooku nebo nedůvěryhodného API třetí strany, validujte je před dekódováním, abyste zobrazili jasné, použitelné chyby místo matoucích binascii.Error traceback hluboko v obchodní logice. Python nabízí dva přístupy: zachytávat výjimky nebo předem validovat pomocí regexu.

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)

Výkonná alternativa: pybase64

Pro naprostou většinu případů použití je stdlib modul base64 Pythonu zcela dostačující. Pokud zpracováváte tisíce API payloadů za sekundu, dekódujete vícemagabajtové binární přílohy v těsné smyčce, nebo váš profiler ukazuje Base64 operace jako úzké místo — zvažte pybase64. Jde o C-extension wrapper kolem libbase64 a je typicky 2–5× rychlejší než stdlib implementace na velkých vstupech.

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 je záměrně identické s base64 — vyměňte import a nic jiného se nemění. Používejte ho pouze tehdy, když profilování potvrdí, že Base64 je skutečně úzkým místem, což je mimo datové pipeline s vysokou propustností neobvyklé.

Časté chyby

Tyto čtyři chyby jsem v code review viděl opakovaně — jsou zvláště časté u vývojářů přicházejících z jazyků jako JavaScript nebo PHP, kde Base64 decode vrací string přímo, nebo z tutoriálů, které ošetření chyb úplně přeskočí.

Chyba 1: Zapomenout zavolat .decode() na výsledku

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

Chyba 2: Použití b64decode() na URL-bezpečném Base64 vstupu

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}

Chyba 3: Neopravení paddingu u zkrácených tokenů

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

Chyba 4: Volání .decode("utf-8") na binárních datech

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")

Dekódování velkých Base64 souborů v Pythonu

Načtení 200 MB Base64 souboru pomocí Path.read_text() a jeho dekódování v jednom volání alokuje zakódovaný řetězec, dekódované bajty a případné mezireprezentace současně — což snadno vyčerpá paměť na omezených serverech nebo Lambda funkcích. Pro soubory větší než ~50–100 MB použijte místo toho přísup po blocích.

Dekódování po blocích na disk (bez načtení celého souboru do RAM)

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")

Dekódování Base64 pomocí base64.decodebytes() pro PEM / víceřádková 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")
Poznámka:Používejte base64.decodebytes() pro PEM certifikáty, MIME přílohy a jakékoli Base64, které se zalomuje na pevných šířkách řádku. Používejte přístup po blocích výše pro velké neprůhledné bloby (zálohy, mediální soubory). Pro kompaktní, jednořádkové tokeny (JWT, OAuth), je b64decode() nebo urlsafe_b64decode() vždy správnou volbou.

Metody dekódování Base64 v Pythonu — Rychlé srovnání

MetodaAbecedaPaddingVýstupVyžaduje instalaciNejlepší pro
base64.b64decode()Standardní (A–Z a–z 0–9 +/)VyžadovánbytesNe (stdlib)Obecné použití, e-mail, PEM
base64.decodebytes()Standardní (A–Z a–z 0–9 +/)Ignorován (odstraní bílé znaky)bytesNe (stdlib)PEM certifikáty, MIME přílohy, víceřádkové Base64
base64.urlsafe_b64decode()URL-bezpečná (A–Z a–z 0–9 -_)VyžadovánbytesNe (stdlib)JWT, OAuth, Google Cloud APIs
base64.b32decode()32 znaků (A–Z, 2–7)VyžadovánbytesNe (stdlib)TOTP tajemství, DNS-bezpečná ID
base64.b16decode()Hex (0–9, A–F)ŽádnýbytesNe (stdlib)Hex-kódované kontrolní součty, hashe
pybase64.b64decode()Standardní (A–Z a–z 0–9 +/)VyžadovánbytesAno (pip)Vysokopropustnostní pipeline, velké payloady
CLI: base64 --decodeStandardníAutomatickýstdoutNe (systém)Rychlá terminálová inspekce

Používejte b64decode() jako výchozí. Přepněte na urlsafe_b64decode()jakmile uvidíte - nebo _ ve vstupu — tyto znaky jsou nezaměnitelným znakem URL-bezpečného Base64. Sáhněte po pybase64 pouze poté, co profilování potvrdí úzké místo. Pro jednorázové kontroly během vývoje zpracuje Base64 Decoder ToolDecku obě abecedy a automaticky opraví padding — není potřeba prostředí Pythonu.

Často kladené otázky

Jak dekóduji Base64 řetězec na běžný řetězec v Pythonu?

Zavolejte base64.b64decode(encoded) pro získání bytes, poté zavolejte .decode("utf-8")na výsledek pro získání Python str. Tyto dva kroky jsou vždy oddělené, protože b64decode() pouze obrátí Base64 abecedu — neví, zda původní obsah byl UTF-8, Latin-1 nebo binární. Pokud data používají jiné než UTF-8 kódování, předejte správný název kodeku do .decode(), například .decode("latin-1").

Proč dostávám “Incorrect padding” při dekódování Base64 v Pythonu?

Base64 řetězce musí mít délku, která je násobkem 4 znaků. JWT, OAuth tokeny a data přenášená v URL často odstraňují koncový = padding. Opravte to připojením "=" * (-len(s) % 4) před dekódováním. Tento vzorec přidá přesně 0, 1 nebo 2 znaky dle potřeby a je bezpečnou no-op operací, když je řetězec již správně doplněn.

Jaký je rozdíl mezi b64decode() a urlsafe_b64decode() v Pythonu?

Obě dekódují stejný algoritmus Base64, ale s různými abecedami pro 62. a 63. znak.b64decode() používá + a /; urlsafe_b64decode() používá - a _. URL-bezpečná varianta je definována v RFC 4648 §5 a používá se všude, kde Base64 musí přežít v URL, HTTP hlavičkách nebo hodnotách cookie bez procentového kódování. Jejich záměna způsobuje buď binascii.Error nebo tiché poškození výstupu.

Jak dekóduji Base64-kódovaný obrázek v Pythonu?

Dekódujte na bytes pomocí base64.b64decode(encoded), poté tyto bytes zapište přímo do souboru — nevolejte .decode("utf-8") na obrazová data. Pokud je vstup data URL (např. data:image/png;base64,iVBORw0KGgo…), nejprve odstraňte prefix:

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_jnovak.png").write_bytes(image_bytes)
print(f"Saved {len(image_bytes)} bytes")

Mohu dekódovat Base64 v Pythonu bez importování jakéhokoli modulu?

Technicky ano, ale není k tomu důvod. Modul base64 je součástí standardní knihovny Pythonu, vždy dostupný, vždy nainstalovaný — nemá žádné závislosti a jeho funkce jsou implementovány v C. Reimplementace Base64 od nuly by byla pomalejší, náchylnější k chybám a obtížněji udržovatelná. Vždy používejte import base64.

Jak dekóduji Base64 v Pythonu, když vstupem jsou bytes, nikoli string?

base64.b64decode() přijímá str, bytes a bytearray zaměnitelně — konverze není potřeba. Pokud dostanete b"SGVsbG8=" ze socketu nebo čtení souboru, předejte to přímo. Oprava paddingu funguje stejně pro bytes: data + b"=" * (-len(data) % 4) v režimu bytes.

Související nástroje

  • Base64 Encode — okamžitě zakódujte text nebo binární soubory do Base64; užitečné pro generování testovacích přípravků pro váš Python dekódovací kód bez spouštění skriptu.
  • JWT Decoder — prohlédněte JWT hlavičku a payload bez psaní kódu; payload je dekódován pomocí URL-bezpečného Base64 pod kapotou, přesně jak je ukázáno v příkladech výše.
  • URL Decode — procentově dekódujte query stringy a segmenty cest; často potřebné vedle Base64 dekódování při parsování OAuth callback URL nebo webhook payloadů.
  • URL Encode — procentově kódujte speciální znaky; šikovné, když potřebujete bezpečně vložit Base64-kódovanou hodnotu do URL query parametru.
Dostupné také v: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 VolkovTechnický recenzent

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.