Toolypet
Back to Blog
Dev

Der vollständige Base64-Kodierung-Leitfaden: Von den Grundlagen bis zur Anwendung

Erfahren Sie mehr über die Funktionsweise der Base64-Kodierung und praktische Anwendungen in der Webentwicklung.

Toolypet Team6 min read
Der vollständige Base64-Kodierung-Leitfaden: Von den Grundlagen bis zur Anwendung

Warum wurde Base64 entwickelt?

Um den Ursprung von Base64 zu verstehen, müssen wir in die 1970er Jahre und die E-Mail-Systeme dieser Zeit zurückgehen. Das damalige E-Mail-Protokoll SMTP konnte nur 7-Bit-ASCII-Zeichen übertragen. Es wurden nur englische Buchstaben, Zahlen und grundlegende Symbole unterstützt - Binärdateien wie Bilder oder Dokumente sowie Multibyte-Zeichen wie koreanische Schriftzeichen konnten nicht übertragen werden.

Um dieses Problem zu lösen, wurde der MIME-Standard (Multipurpose Internet Mail Extensions) entwickelt, und eine der Kerntechnologien war Base64. Base64 wandelt beliebige Binärdaten in sichere ASCII-Zeichenketten um, sodass Dateien auch in Systemen übertragen werden können, die nur Text verarbeiten können.

Auch heute wird Base64 noch weit verbreitet eingesetzt. Sie begegnen ihm bei E-Mail-Anhängen, Inline-Bildern auf Webseiten, API-Authentifizierung, JWT-Tokens und vielem mehr. Es ist grundlegendes Wissen, das jeder Webentwickler verstehen sollte.

Das Kernprinzip von Base64: 64 sichere Zeichen

Der Name Base64 stammt daher, dass 64 Zeichen verwendet werden. Diese 64 Zeichen wurden sorgfältig ausgewählt, damit sie von nahezu allen Systemen weltweit sicher verarbeitet werden können:

A-Z (26) + a-z (26) + 0-9 (10) + + / (2) = 64 Zeichen

Zusätzlich wird das =-Zeichen für Padding verwendet. Warum 64? Da 64 gleich 2^6 ist, kann ein Base64-Zeichen mit 6 Bits dargestellt werden. Die Beziehung zwischen dem Byte (8 Bits), das Computer für die Datenverarbeitung verwenden, und den 6 Bits ist der Kern des Base64-Algorithmus.

Der Kodierungsprozess: Schritt für Schritt verstehen

Schauen wir uns an, wie die Base64-Kodierung funktioniert, am Beispiel der Zeichenkette "Man".

Schritt 1: Jedes Zeichen in 8-Bit-Binärzahlen umwandeln

M → 77  → 01001101
a → 97  → 01100001
n → 110 → 01101110

Schritt 2: 24 Bits in 4 Gruppen von je 6 Bits aufteilen

Wenn 24 Bits (3 Bytes) in 6-Bit-Gruppen aufgeteilt werden, ergeben sich 4 Gruppen. Dies ist der Grund, warum Base64 die Datengröße um etwa 33% erhöht - 3 Bytes Eingabe werden in 4 Zeichen (4 Bytes) Ausgabe umgewandelt.

010011 | 010110 | 000101 | 101110

Schritt 3: Jede 6-Bit-Gruppe in ein Base64-Zeichen umwandeln

010011 → 19 → T
010110 → 22 → W
000101 → 5  → F
101110 → 46 → u

Ergebnis: "Man""TWFu"

Die Rolle des Paddings (=)

Was passiert, wenn die Eingabedaten kein Vielfaches von 3 Bytes sind? Dann kommt das Padding-Zeichen = zum Einsatz.

Zum Beispiel, wenn nur "M" (1 Byte) kodiert wird:

  • Das Aufteilen von 8 Bits in 6-Bit-Einheiten hinterlässt 2 Bits
  • 4 Bits mit Nullen werden hinzugefügt, um 2 Base64-Zeichen zu erstellen
  • Die verbleibenden 2 Stellen werden mit = aufgefüllt
"M" → "TQ=="
"Ma" → "TWE="
"Man" → "TWFu"

Padding ermöglicht es, bei der Dekodierung die exakte Länge der Originaldaten zu kennen. Bei der Verwendung in URLs wird das Padding manchmal weggelassen.

Praktische Anwendungen in der Webentwicklung

1. Bilder mit Data URI einbetten

Mit Data URIs können Bilder direkt in HTML oder CSS eingebettet werden, ohne separate Dateien.

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..." />
.icon {
  background-image: url('data:image/svg+xml;base64,PHN2Zy...');
}

Wann sinnvoll:

  • Kleine Icons (unter 1-2 KB)
  • Bilder, die nicht wiederholt verwendet werden
  • Wenn die Anzahl der HTTP-Anfragen reduziert werden soll

Wann zu vermeiden:

  • Große Bilder (33% Größenzunahme ist belastend)
  • Dasselbe Bild auf mehreren Seiten (Caching nicht möglich)
  • Bilder, die sich häufig ändern

2. HTTP Basic-Authentifizierung

HTTP Basic-Authentifizierung ist eine der einfachsten Authentifizierungsmethoden. Benutzername und Passwort werden mit einem Doppelpunkt verbunden und dann Base64-kodiert.

const username = 'admin';
const password = 'secret123';
const credentials = btoa(`${username}:${password}`);

fetch('https://api.example.com/data', {
  headers: {
    'Authorization': `Basic ${credentials}`
  }
});

Der Server dekodiert diesen Header, um die Authentifizierungsinformationen zu extrahieren. Beachten Sie jedoch, dass Base64 keine Verschlüsselung ist und daher unbedingt mit HTTPS verwendet werden muss. Bei der Übertragung über HTTP kann jeder das Passwort einsehen.

3. JWT (JSON Web Token) Struktur

JWT besteht aus drei Teilen, die jeweils mit Base64URL kodiert sind:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.  // Header
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4ifQ.  // Payload
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c  // Signatur

Der Grund für die Verwendung von Base64URL in JWT ist, dass das Token als URL-Query-Parameter übertragen werden kann. Die + und / des Standard-Base64 haben in URLs eine besondere Bedeutung und werden daher durch sichere Zeichen ersetzt.

4. Datei-Upload

Beim Hochladen von Dateien per Ajax können Dateien statt als FormData auch als Base64-String übertragen werden:

const fileInput = document.querySelector('input[type="file"]');
const file = fileInput.files[0];
const reader = new FileReader();

reader.onload = function(e) {
  const base64 = e.target.result;
  // An Server senden
  fetch('/upload', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ file: base64 })
  });
};

reader.readAsDataURL(file);

Diese Methode ist praktisch für die Verwendung mit JSON-APIs, aber da die Dateigröße um 33% zunimmt, ist sie für große Dateien nicht geeignet.

Verwendung in verschiedenen Programmiersprachen

JavaScript (Browser)

// Kodieren
const encoded = btoa('Hello World');  // "SGVsbG8gV29ybGQ="

// Dekodieren
const decoded = atob('SGVsbG8gV29ybGQ=');  // "Hello World"

Hinweis: btoa() und atob() unterstützen nur lateinische Zeichen. Um koreanische Zeichen oder Emojis zu verarbeiten:

// UTF-8 Kodierung
function encodeUnicode(str) {
  return btoa(encodeURIComponent(str).replace(
    /%([0-9A-F]{2})/g,
    (_, p1) => String.fromCharCode('0x' + p1)
  ));
}

// UTF-8 Dekodierung
function decodeUnicode(str) {
  return decodeURIComponent(
    atob(str).split('').map(c =>
      '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
    ).join('')
  );
}

Node.js

// Kodieren
const encoded = Buffer.from('Hello World').toString('base64');

// Dekodieren
const decoded = Buffer.from(encoded, 'base64').toString('utf-8');

Python

import base64

# Kodieren
encoded = base64.b64encode(b'Hello World').decode('utf-8')

# Dekodieren
decoded = base64.b64decode('SGVsbG8gV29ybGQ=').decode('utf-8')

# URL-sicheres Base64
url_safe = base64.urlsafe_b64encode(b'data').decode('utf-8')

Base64 vs. Base64URL im Vergleich

EigenschaftBase64Base64URL
+ Zeichen+- (Bindestrich)
/ Zeichen/_ (Unterstrich)
Padding =ErforderlichOptional (kann weggelassen werden)
HauptverwendungE-Mail, allgemeine DatenURL, Dateinamen, JWT

In URLs wird + als Leerzeichen interpretiert und / als Pfadtrenner. Base64URL verhindert diese Probleme.

Häufige Fehler und Warnhinweise

1. Base64 mit Verschlüsselung verwechseln Base64 ist eine Kodierung, keine Verschlüsselung. Jeder kann sie leicht dekodieren, daher sollte sie nicht verwendet werden, um sensible Informationen zu verbergen. Wenn Sicherheit erforderlich ist, verwenden Sie einen echten Verschlüsselungsalgorithmus wie AES.

2. Data URI für große Dateien verwenden Data URIs können nicht gecacht werden. Wenn Sie ein 100-KB-Bild in Base64 umwandeln, werden es 133 KB, und es wird bei jedem Seitenaufruf erneut heruntergeladen. Durch Auslagern in eine externe Datei kann vom Browser-Cache profitiert werden.

3. Zeilenumbrüche ignorieren Einige Base64-Implementierungen fügen alle 76 Zeichen Zeilenumbrüche ein (MIME-Standard). Wenn Zeilenumbrüche vor dem Dekodieren nicht entfernt werden, können Fehler auftreten.

4. Zeichenkodierung ignorieren Wenn Sie versuchen, koreanische Zeichen direkt mit btoa() zu kodieren, tritt ein Fehler auf. Sie müssen sie zuerst in UTF-8 konvertieren.

Toolypet Base64-Tools nutzen

Der Toolypet Base64-Encoder/Decoder vereinfacht den Entwickler-Workflow:

  • Textkonvertierung: Konvertieren Sie normalen Text sofort in Base64 und umgekehrt
  • Dateikonvertierung: Konvertieren Sie Bilder oder Dokumente per Drag-and-Drop in Base64
  • Data URI-Generierung: Automatische Generierung von Data URIs mit passendem MIME-Typ
  • Automatische UTF-8-Verarbeitung: Vollständige Unterstützung für koreanische Zeichen, Emojis und andere Unicode-Zeichen

Wenn Sie während der Entwicklung Base64-Konvertierung benötigen, nutzen Sie es direkt im Browser, ohne zusätzliche Bibliotheken zu installieren oder Code zu schreiben.

Base64EncodingBinary DataWeb Development