Base64 Encoder & Decoder – Kostenlos, Online & DSGVO-sicher
Base64 Encoder & Decoder
Text, URLs und Dateien blitzschnell in Base64 kodieren und dekodieren — vollständig im Browser, ohne Server, ohne Datenverlust. Mit vollständiger UTF-8-Unterstützung, URL-Safe-Modus und Datei-Encoding für Entwickler, DevOps-Engineers und IT-Profis.
Im Text-Modus gibst du einfach Text ein — der Base64-Code wird sofort erzeugt. Mit dem Decodieren-Tab kannst du Base64-Strings zurück in Klartext übersetzen. Im URL-Safe-Modus erhältst du base64url-kodierte Ausgaben für Tokens und Query-Parameter. Im Datei-Modus kodierst du Bilder oder Dateien als Base64-String für CSS data: URLs oder API-Aufrufe.
Was ist Base64? – Grundlagen verständlich erklärt
Base64 ist ein Binär-zu-Text-Kodierungsverfahren, das beliebige Binärdaten in einen druckbaren ASCII-Zeichensatz umwandelt. Der Name leitet sich von der Basis 64 ab: Das Verfahren verwendet exakt 64 druckbare Zeichen, die in jedem bekannten Zeichensatz vorhanden sind — egal ob auf alten Terminals, in E-Mails, HTTP-Headern oder XML-Dokumenten.
Base64 wurde in RFC 2045 (MIME) standardisiert und ist heute in zahlreichen Protokollen fest verankert — von E-Mail über HTTP bis hin zu OAuth und JWT. Es ist wichtig zu verstehen: Base64 ist keine Verschlüsselung, sondern ausschließlich eine Kodierungsmethode. Jeder kann einen Base64-String ohne Schlüssel sofort dekodieren.
🔒 Datenschutz-Hinweis: Alle Berechnungen laufen vollständig in deinem Browser per JavaScript. Kein Byte deiner Eingabe verlässt deinen Computer. Dieses Tool ist damit vollständig DSGVO-konform.
Das Base64-Zeichenset im Überblick
Das Standard-Base64-Alphabet besteht aus genau 64 Zeichen plus dem Padding-Zeichen =:
- 26 Großbuchstaben:
A–Z(Index 0–25) - 26 Kleinbuchstaben:
a–z(Index 26–51) - 10 Ziffern:
0–9(Index 52–61) - 2 Sonderzeichen:
+(Index 62) und/(Index 63) - Padding-Zeichen:
=(kein Datenwert, nur Auffüllung)
Base64 Zeichentabelle (vollständig)
💡 URL-Safe Variante: Bei Base64url wird + durch - und / durch _ ersetzt. Padding (=) wird oft weggelassen. Diese Variante ist sicher für URLs, Query-Strings und JWTs.
Wie funktioniert Base64? – Der Algorithmus Schritt für Schritt
Der Base64-Algorithmus ist elegant einfach: Er liest 3 Bytes (24 Bit) aus den Eingabedaten, teilt diese 24 Bit in vier 6-Bit-Gruppen auf, und mappt jede 6-Bit-Gruppe auf eines der 64 Zeichen. Da 2^6 = 64, passen genau 64 Zeichen in eine 6-Bit-Gruppe.
Bit-Gruppen-Visualisierung: „Man" → „TWFu"
Schauen wir uns das Beispiel-Wort „Man" genau an. Die drei Buchstaben haben die ASCII-Werte 77 (M), 97 (a) und 110 (n):
Eingabe-Bytes: M (77) a (97) n (110)
Binär (8 Bit): 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
←──────────────────────────────────────────────────→
24 Bit gesamt
6-Bit-Gruppen: [010011] [010110] [000101] [101110]
Dezimalwerte: 19 22 5 46
Base64-Zeichen: T W F u
Ergebnis: "TWFu"
Padding – warum gibt es =-Zeichen?
Base64 verarbeitet immer genau 3 Bytes auf einmal. Ist die Eingabe nicht durch 3 teilbar, werden Padding-Bytes hinzugefügt:
- Eingabe = 1 Byte (8 Bit): nur 2 Base64-Zeichen werden benötigt, 2×
=werden angehängt → 4 Zeichen gesamt - Eingabe = 2 Bytes (16 Bit): 3 Base64-Zeichen werden benötigt, 1×
=wird angehängt → 4 Zeichen gesamt - Eingabe = 3 Bytes (24 Bit): 4 Base64-Zeichen, kein Padding nötig → 4 Zeichen gesamt
Deshalb enden viele Base64-Strings auf = oder ==. Die Länge eines Base64-Strings ist immer ein Vielfaches von 4.
Warum wird Base64 verwendet? – Die wichtigsten Anwendungsfälle
Base64 löst ein fundamentales Problem der digitalen Kommunikation: Viele Übertragungskanäle wurden ursprünglich nur für 7-Bit-ASCII-Text konzipiert. E-Mail-Protokolle, HTTP-Header, XML und viele andere Formate können keine rohen Binärdaten transportieren. Base64 überbrückt diese Lücke, indem es beliebige Binärdaten in einen sicheren ASCII-String umwandelt.
url() oder HTML src eingebettet.Authorization-Header übertragen.Praxisbeispiele: Base64 in der Entwicklung
Beispiel 1: Text kodieren – „Hallo Welt"
Hallo Welt (10 Bytes in ASCII/UTF-8)SGFsbG8gV2VsdA== — Das == am Ende ist Padding, weil 10 Bytes kein Vielfaches von 3 sind (10 mod 3 = 1).Beispiel 2: HTTP Basic Authentication
# Nutzername: admin Passwort: geheimesPasswort123
echo -n "admin:geheimesPasswort123" | base64
# → YWRtaW46Z2VoZWltZXNQYXNzd29ydDEyMw==
# Im HTTP-Request:
curl -H "Authorization: Basic YWRtaW46Z2VoZWltZXNQYXNzd29ydDEyMw==" \
https://api.example.com/geschuetzteRessource
Beispiel 3: Bild als Data-URL in CSS einbetten
/* Methode 1: PNG-Bild direkt in CSS */
.logo {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...");
width: 64px;
height: 64px;
}
/* Methode 2: SVG inline als Data-URL */
.icon {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0i...");
}
/* Methode 3: Im HTML img-Tag */
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgAB..." alt="Beispielbild"/>
Beispiel 4: JWT Token analysieren
JSON Web Tokens bestehen aus drei durch . getrennten Base64url-kodierten Teilen. Mit unserem JWT Decoder kannst du Tokens direkt analysieren. Manuell geht es so:
# Ein JWT sieht so aus:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik1heCBNdXN0ZXJtYW5uIn0
.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
# Header dekodieren (Base64url → JSON):
echo "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" | base64 -d
# → {"alg":"HS256","typ":"JWT"}
# Payload dekodieren:
echo "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik1heCBNdXN0ZXJtYW5uIn0" | base64 -d
# → {"sub":"1234567890","name":"Max Mustermann"}
Beispiel 5: Base64 in einer REST API (Python)
import base64, requests
# Bild in Base64 kodieren
with open("bild.png", "rb") as f:
bild_b64 = base64.b64encode(f.read()).decode("utf-8")
# Als JSON-API-Request senden
response = requests.post("https://api.example.com/bild-upload", json={
"name": "Profilbild",
"data": bild_b64,
"mime_type": "image/png"
})
# Base64 dekodieren und speichern
bild_bytes = base64.b64decode(bild_b64)
with open("bild_neu.png", "wb") as f:
f.write(bild_bytes)
# URL-Safe Base64 (für Tokens)
token = base64.urlsafe_b64encode(b"geheime_daten").decode("utf-8")
print(token) # Z2VoZWltZV9kYXRlbg==
Base64 vs. Base64url – Der wichtige Unterschied
Standard-Base64 verwendet die Zeichen + und /, die in URLs und Query-Strings eine Sonderbedeutung haben: + steht für ein Leerzeichen, / ist ein Pfadtrenner. Deshalb existiert die URL-Safe-Variante Base64url:
| Aspekt | Standard Base64 | Base64url (URL-Safe) |
|---|---|---|
| Zeichen 62 | + | - |
| Zeichen 63 | / | _ |
| Padding | = immer | = oft weggelassen |
| RFC | RFC 4648 §4 | RFC 4648 §5 |
| Verwendung | MIME, E-Mail, allgemein | JWT, OAuth, URLs, Cookies |
| URL-sicher | ❌ Nein | ✅ Ja |
Base64 vs. Hex – Welches Format wann?
Entwickler stehen oft vor der Wahl zwischen Base64 und Hexadezimal-Kodierung. Beide wandeln Binärdaten in Text um, haben aber unterschiedliche Eigenschaften:
| Eigenschaft | Base64 | Hexadezimal |
|---|---|---|
| Größenzunahme | ~33% | ~100% |
| Zeichen-Set | 64 Zeichen | 16 Zeichen (0-9, a-f) |
| Lesbarkeit | Weniger lesbar | Gut lesbar (pro Byte) |
| Typische Verwendung | Dateiübertragung, APIs, E-Mail | Hashes, Kryptografie, Debugging |
| Beispiel (3 Bytes) | TWFu (4 Zeichen) | 4d616e (6 Zeichen) |
| URL-Safe Variante | ✅ Base64url | ✅ Von Natur aus sicher |
💡 Faustregel: Verwende Base64 für Dateiinhalte und API-Payloads (kompakter). Verwende Hex für kryptografische Hashes, Fingerprints und Debug-Ausgaben (besser lesbar). Für Hash-Generierung steht dir unser Hash Generator (MD5/SHA) zur Verfügung.
Base64 in der Webentwicklung – Praxis-Guide
Data-URLs: Bilder ohne Datei-Request
Data-URLs ermöglichen es, Ressourcen direkt im HTML oder CSS einzubetten. Das Prinzip: data:[MIME-Typ];base64,[Base64-Daten].
- 📐 Sehr kleine Icons (< 2 KB)
- 🔤 Inline-SVG-Icons
- 📧 HTML-E-Mails (Bilder inlinen)
- 📱 Offline-fähige Apps (PWA)
- 🚫 Ressourcen ohne CORS-Erlaubnis
- 🎭 CSS-Hintergrundmuster / Texturen
- 📷 Große Fotos (> 10 KB)
- 🎬 Videos und Audiodateien
- 📄 Viele wiederverwendete Ressourcen
- 🔄 Häufig aktualisierte Bilder
- 💾 Ressourcen die gecacht werden sollen
- 🔍 SEO-relevante Bilder (alt-Text)
Base64 in JSON APIs – Best Practices
REST-APIs, die JSON als Transportformat nutzen, können keine rohen Binärdaten senden. Bilder, PDFs oder andere Dateien werden deshalb als Base64-Strings in den JSON-Body eingebettet. Dies ist die Standardpraxis bei der OpenAI Vision API, SendGrid, Twilio und vielen anderen.
// Beispiel: Bild per API mit Base64 senden (JavaScript)
async function sendBildZurAPI(bildDatei) {
// FileReader für Browser-Upload
const base64 = await new Promise((res, rej) => {
const reader = new FileReader();
reader.onload = () => res(reader.result.split(",")[1]); // ohne data:xxx; prefix
reader.onerror = rej;
reader.readAsDataURL(bildDatei);
});
const response = await fetch("https://api.example.com/analyse", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
bild: base64,
mime_typ: bildDatei.type,
dateiname: bildDatei.name
})
});
return response.json();
}
// OpenAI Vision API Beispiel
const payload = {
model: "gpt-4-vision-preview",
messages: [{
role: "user",
content: [{
type: "image_url",
image_url: { url: `data:image/jpeg;base64,${base64Bild}` }
}, {
type: "text",
text: "Was siehst du auf diesem Bild?"
}]
}]
};
Kubernetes Secrets und CI/CD
In Kubernetes werden Secrets als Base64-kodierte Strings in YAML-Dateien gespeichert. Wichtig: Dies ist keine Sicherheitsmaßnahme — Kubernetes Secrets sind standardmäßig nicht verschlüsselt gespeichert.
# Kubernetes Secret erstellen
echo -n "mein-passwort" | base64
# → bWVpbi1wYXNzd29ydA==
# kubernetes-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: db-credentials
type: Opaque
data:
password: bWVpbi1wYXNzd29ydA==
username: YWRtaW4= # "admin" base64-kodiert
# Secret dekodieren
kubectl get secret db-credentials -o jsonpath='{.data.password}' | base64 -d
Base64 und Sicherheit – Was Entwickler wissen müssen
Das häufigste Missverständnis in der Webentwicklung: Base64 wird fälschlicherweise mit Verschlüsselung gleichgesetzt. Das kann zu ernsthaften Sicherheitslücken führen.
Wann echte Sicherheit notwendig ist
| Szenario | Base64 ausreichend? | Empfehlung |
|---|---|---|
| Bild in Data-URL einbetten | ✅ Ja | Base64 ist ideal |
| JWT Payload übertragen | ⚠️ Mit Signatur | Base64url + HMAC/RSA Signatur |
| Passwörter übertragen | ❌ Nein | Immer HTTPS + Hashing (bcrypt) |
| Sensible Dateien speichern | ❌ Nein | AES-256 Verschlüsselung |
| API-Keys in Config speichern | ❌ Nein | Vault, KMS oder Sealed Secrets |
Für das Hashing von Passwörtern und die Prüfung von Dateiintegrität empfehlen wir unseren Hash Generator (MD5/SHA-256). Sichere Passwörter erstellst du mit unserem Passwort Generator, der die Web Crypto API des Browsers nutzt.
Häufige Fehler bei Base64 – und wie du sie vermeidest
Fehler 1: Umlaute und Unicode-Zeichen
Die native JavaScript-Funktion btoa() verarbeitet nur Latin-1-Zeichen (Codepoints 0–255). Deutsche Umlaute wie ä, ö, ü, ß sowie Emojis und andere Unicode-Zeichen verursachen einen InvalidCharacterError.
// ❌ FALSCH — wirft InvalidCharacterError
btoa("Ä is an Umlaut"); // DOMException!
// ✅ KORREKT — UTF-8 korrekt behandeln
function safeBase64Encode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
(match, p1) => String.fromCharCode(parseInt(p1, 16))));
}
function safeBase64Decode(str) {
return decodeURIComponent(atob(str).split('').map(c =>
'%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));
}
safeBase64Encode("Hallo Ü-Welt! 🌍"); // Funktioniert korrekt
Fehler 2: Fehlendes Padding ignorieren
Beim Dekodieren muss die Länge eines Base64-Strings ein Vielfaches von 4 sein. Bei Base64url-Strings wird das Padding (=) oft weggelassen, was beim Dekodieren zu Fehlern führen kann.
// ❌ FALSCH — Padding fehlt
atob("SGFsbG8"); // kann fehlschlagen
// ✅ KORREKT — Padding auffüllen
function padBase64(str) {
while (str.length % 4 !== 0) str += "=";
return str;
}
atob(padBase64("SGFsbG8")); // → "Hello"
// URL-Safe Base64 dekodieren (mit Padding-Fix)
function fromBase64Url(str) {
str = str.replace(/-/g, "+").replace(/_/g, "/");
while (str.length % 4) str += "=";
return atob(str);
}
Fehler 3: Zeilenumbrüche in APIs
Gemäß RFC 2045 (MIME) sollten Base64-Strings nach 76 Zeichen umgebrochen werden. Viele APIs und Parser erwarten jedoch einen ununterbrochenen String. Bei API-Calls solltest du Zeilenumbrüche immer entfernen:
// Zeilenumbrüche aus Base64-String entfernen const sauberB64 = schmutzigB64.replace(/[\r\n\s]/g, ""); // Python import base64, re sauber = re.sub(r'[\s]', '', base64.b64encode(data).decode())
Fehler 4: Zu große Dateien kodieren
Base64-Encoding großer Dateien verursacht massive Performance-Probleme: Ein 10 MB großes Bild wird zu ca. 13–14 MB Base64-Text. Bei Dateien über 1 MB solltest du alternative Ansätze in Betracht ziehen:
- Multipart-Form-Upload statt JSON mit Base64
- Presigned URLs (z.B. AWS S3) für direkte Datei-Uploads
- Binäre Protokolle (gRPC, MessagePack) statt REST+JSON
Base64 Performance und Speicherverbrauch
Base64-Encoding ist CPU-günstig — das eigentliche Performance-Problem entsteht durch den erhöhten Datenübertrag (33% mehr Bytes) und die erhöhte Speichernutzung im Browser-Speicher. Bei großen Dateien kann Base64 auch Garbage-Collection-Pausen verursachen, da sehr lange Strings im Heap liegen.
Performance-Optimierungen
- Streaming: Große Dateien in Chunks verarbeiten statt alles auf einmal laden
- Web Workers: Base64-Encoding in einem Background-Thread ausführen, um den UI-Thread nicht zu blockieren
- Server-seitig: Für Dateien über 5 MB die Kodierung besser auf dem Server durchführen
- FileReader API: Im Browser direkt
readAsDataURL()nutzen — das ist intern optimiert
Base64 in Datenbanken speichern
Manchmal müssen Base64-kodierte Daten in Datenbanken gespeichert werden — z.B. kleine Thumbnails oder Konfigurationsdaten. Hier sind wichtige Punkte zu beachten:
| Datenbank | Empfohlener Typ | Hinweis |
|---|---|---|
| PostgreSQL | TEXT oder BYTEA | BYTEA für Binärdaten bevorzugen, TEXT für Base64-Strings |
| MySQL / MariaDB | LONGTEXT oder BLOB | BLOB direkter und platzsparender |
| SQLite | TEXT oder BLOB | BLOB ist kompakter (kein Base64-Overhead) |
| MongoDB | BinData | Native BSON-Binärfelder statt Base64-String nutzen |
| Redis | String | Bei kleinen Daten OK; für große Daten externe Storage besser |
💡 Tipp: Wenn du Binärdaten in einer Datenbank speichern möchtest, ist der native Binärtyp (BYTEA, BLOB, BinData) fast immer effizienter als Base64 — er spart die 33% Overhead. Nutze Base64 in Datenbanken nur, wenn du sicher sein musst, dass der String via JSON-APIs, HTTP-Headers oder CSV-Exports übertragen wird.
Base64 Padding verstehen – Deep Dive
Das Padding-Konzept ist einer der am häufigsten missverstandenen Aspekte von Base64. Hier eine vollständige Erklärung:
| Eingabe-Bytes | Binär-Bits | Benötigte 6-Bit-Gruppen | Padding | Ausgabe-Zeichen |
|---|---|---|---|---|
| 1 Byte (8 Bit) | 8 | 2 (davon 4 Bit ungenutzt) | == | 4 |
| 2 Bytes (16 Bit) | 16 | 3 (davon 2 Bit ungenutzt) | = | 4 |
| 3 Bytes (24 Bit) | 24 | 4 (alle Bits genutzt) | kein Padding | 4 |
Die Ausgabelänge eines Base64-Strings lässt sich mit dieser Formel berechnen:
// Ausgabelänge berechnen (ohne Zeilenumbrüche)
function base64Length(inputBytes) {
return Math.ceil(inputBytes / 3) * 4;
}
base64Length(10) // → 16
base64Length(100) // → 136
base64Length(1000) // → 1336
// Größenzunahme in Prozent
function base64Overhead(inputBytes) {
return ((base64Length(inputBytes) / inputBytes) - 1) * 100;
}
// Für alle n → 33.3% (oder leicht mehr durch Zeilenumbrüche)
Verwandte Entwickler-Tools auf Werkix
Base64 ist oft nur ein Teil eines größeren Workflows. Hier sind die am häufigsten gemeinsam verwendeten Tools:
Häufig gestellte Fragen zu Base64
base64 -d oder einem einzeiligen Code-Snippet in jeder Programmiersprache. Für echte Verschlüsselung sind Verfahren wie AES-256-GCM oder ChaCha20-Poly1305 notwendig.= als Padding-Zeichen angehängt: Ein = bedeutet, dass ein Byte fehlt (2 Bytes Eingabe); zwei == bedeuten, dass zwei Bytes fehlen (1 Byte Eingabe). Dies ermöglicht dem Decoder zu erkennen, wie viele tatsächliche Datenbytes am Ende vorhanden sind. Base64url-Strings lassen das Padding oft weg, was beim Dekodieren manuell wieder hinzugefügt werden muss.+ wird zu - (weil + in URLs für Leerzeichen steht) und / wird zu _ (weil / Pfadtrenner in URLs ist). Außerdem wird das Padding (=) oft weggelassen, da es in Query-Strings Kodierungsprobleme verursachen kann. Base64url wird bei JWTs, OAuth 2.0-Tokens, PKCE, URL-Parametern und Cookies verwendet.btoa()-Funktion im Browser unterstützt nur Zeichen im Latin-1-Bereich (Unicode-Codepoints 0–255). Deutsche Umlaute (ä, ö, ü, ß) und Emojis haben höhere Codepoints und müssen erst in UTF-8-Bytes umgewandelt werden, bevor sie mit btoa() kodiert werden können. Unser Tool erledigt das automatisch, wenn die UTF-8-Option aktiviert ist.nutzername:passwort mit Base64 kodiert und im HTTP-Header Authorization: Basic [Base64-String] übertragen. Dies ist keine sichere Authentifizierungsmethode, da Base64 trivial umkehrbar ist — HTTP Basic Auth sollte deshalb ausschließlich über HTTPS verwendet werden.