Command Palette

Search for a command to run...

Base64-Codierung erklärt: Kodieren und dekodieren wie ein Profi

Base64-Codierung erklärt: Kodieren und dekodieren wie ein Profi

T
Toolz Team
|Jun 18, 2026|15 min lesen

Teil der Sammlung Verschlüsselung

Die erste Version des Base64-Konverters, die ich auf Toolz.dev ausgeliefert habe, hatte einen Fehler, den I' mir immer noch leicht peinlich warEs funktionierte perfekt in jedem Test, den ich schrieb - codiert, decodiert, rundgerissen, fertig Dann hat jemand einen Text eingefügt, der ein Emoji enthält, und hat das bekommen:

Uncaught DOMException: InvalidCharacterError:
Failed to execute 'btoa' on 'Window': The string to be
encoded contains characters outside of the Latin1 range.

Ich habe ein Textcodierungstool erstellt und vergessen, dass Text, Sie wissen, der meiste Text. Jedes nicht-lateinische Skript, jedes akzentuierte Zeichen, jedes Emoji - kaputt Meine Tests waren alle ASCII, weil ich in ASCII denke. Dieser Fehler hat mich mehr über Base64 gelehrt als jede Spezi-Lesung, und I' zeigt Ihnen den Fix später, weil er fast jeden, der berührt, zum Auslösen bringt btoa()drohen

Base64 ist eines dieser Dinge, die Entwickler täglich verwenden - in jedem JWT, jedem E-Mail-Anhang, jedem data: URI - während selten unter die Haube schauen Let' s schauen unter die Haube.

tl; dr: Die Base64-Kodierung wandelt Binärdaten in 64 sichere ASCII-Zeichen um, sodass sie über reine Textkanäle wie JSON, URLs und E-Mail übertragen werden können - zum Preis von etwa 33% Größenaufwand. Das ist es nicht Verschlüsselung, jeder kann es sofort umkehren. Verwenden Sie die kostenlose Client-Seite, um jetzt zu kodieren oder zu dekodieren Base64-Konverter Auf Toolz.dev - Ihre Daten verlassen nie den Browser, was wichtig ist, wenn Sie' re-Dekodierungstoken.


Was ist Base64-Codierung?

Base64 ist ein Binär-zu-Text-Codierungsschema: Es stellt beliebige Bytes dar, die nur 64 Zeichen verwenden, die jedes jemals erstellte Textsystem überleben. Die maßgebliche Spezifikation ist RFC 4648 (2006), obwohl die Kodierung auf RFC 1421 und Privacy Enhanced Mail im Jahr 1993 zurückgeht - Base64 ist älter als der Webbrowser.

Das Alphabet:

  • A–Z → Werte 0–25
  • a–z → Werte 26–51
  • 0–9 → Werte 52–61
  • + → 62, / → 63
  • = → Polsterung (kein Wert, nur Füller)

Warum diese 64? Weil sie in ASCII, EBCDIC und jedem E-Mail-Gateway, das jemals gebaut wurde, ungemastert überleben. Base64 ist ein Friedensvertrag mit jahrzehntelanger reiner Textinfrastruktur.

Die Kosten des Vertrags: aus 3 Eingabebytes werden 4 Ausgabezeichen - eine feste Größenabgabe von 33% Behalten Sie diese Zahl im Kopf; sie entscheidet über echte Architekturfragen.


Wie funktioniert der Base64-Algorithmus?

Kürzere Antwort als Sie' d erwarten: Bits von 8 s in 6 s umgruppieren, dann in einer Tabelle nachschlagen. 26 = 64 - das's woher der Name kommt.

Verschlüsselung Hi!:

Schritt 1 - Bytes zu Bits.

Charakter ASCII binär
h 72 01001000
ich 105 01101001
! 33 00100001

Verkettung: 010010000110100100100001- 24 Bit.

Schritt 2 - gruppieren Sie sich in 6-Bit-Blöcke um.

010010 | 000110 | 100100 | 100001
  18   |   6    |   36   |   33

Schritt 3 - jeden Wert im Alphabet nachschlagen.

18 → S, 6 → G, 36 → k, 33 → hdrohen so Hi! codiert zu SGkhdrohen

Das ist der gesamte Algorithmus. Keine Mathematik jenseits einer Nachschlagetabelle.

Polster Verarbeitet Eingaben, die nicht vielfache von 3 Bytes sind. Codieren Sie gerade Hi (2 Bytes = 16 Bit) und Sie können nur 2-und-A-Bit-6-Bit-Gruppen füllen, der Encoder Null-Pads die Bits und anhängig = Um zu signalisieren, wie viel Füller ist:

Hi  → SGk=    (2 bytes remaining → one '=')
H   → SA==    (1 byte remaining  → two '==')
Hi! → SGkh    (multiple of 3     → no padding)

Als ich das für den Toolz.dev-Konverter implementiert habe, lebten dort, wo all meine Off-by-One-Bugs lebten, beim Padding, falls Sie Base64 jemals von Hand rollen - für ein Codierungsinterview, sagen wir - schreiben Sie zuerst die Padding-Tests.

Die Dekodierung ist das Spiegelbild: Zeichen zurück auf 6-Bit-Werte, gruppieren Sie sich in 8-Bit-Bytes um, lassen Sie die Padding fallen.

Base64 encoding process diagram showing binary conversion, 6-bit grouping, and character mapping


Wohin rennst du eigentlich in base64?

JWTs - der Große

Jeder JSON-Web-Token besteht aus drei base64URL-kodierten Segmenten, die durch Punkte verbunden sind: Header, Payload, Signatur. Debuggen Auth ist 50% dekodieren.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U

Dekodieren Sie das erste Segment und Sie erhalten {"alg":"HS256","typ":"JWT"}drohen Der zweite gibt Ihnen die Ansprüche. Mein Workflow Wenn sich ein Token schlecht benimmt: Bei den Punkten aufgeteilt, dekodieren Sie jeden Teil der Base64-Konverter, fügen Sie dann den JSON in die JSON-Formater um es richtig zu lesen. zwei Pasten, und Sie wissen, ob die exp Anspruch ist Ihr Problem.

Es lohnt sich, klar zu sagen: JWT-Nutzlasten sind Lesbar von jedem, der den Token hältdrohen Die Unterschrift hört auf zu manipulieren, nicht zu lesen. Ich habe Codebasen überprüft, die sensible Daten in Ansprüche gefüllt haben, weil der Kauderwelsch die Privatsphäre implizierte. es tut nicht.

JWT being decoded with Base64 converter showing header, payload, and signature parts

Daten-URIs

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />

Durch das Einbetten kleiner Assets inline speichert eine HTTP-Anforderung. Meine Faustregel beim Erstellen von bildintensiven WordPress-Admin-UIs: Es lohnt sich unter ~ 5 KB, nach 10 KB blähen Sie das Dokument um 33% auf, um eine Anfrage HTTP / 2-Multiplexe trotzdem zu speichern.

Kubernetes Secrets - und eine Schimpftirade

apiVersion: v1
kind: Secret
data:
  password: cGFzc3dvcmQ=   # decodes to "password"

Kubernetes Secrets sind Base64-kodiert, und die falsche Sicherheit, die dies impliziert, ist alarmierend Dieser Wert dekodiert in einer Paste Base64 hier existiert also Binärwerte überleben YAML - a Formatierung Entscheidung, keine Sicherheits-. Wenn Ihre Geheimnisse bei "Base64 in etcd" endet, hat sie nicht begonnen.

Der Rest der Liste

HTTP-Basis-Authenheader (Authorization: Basic dXNlcjpwYXNz Dekodieren zu einfach user:pass- daher nur HTTPS-fähig).E-Mail-Anhänge über MIME. Binäre Blobs innerhalb von JSON-Nutzlasten, da JSON keinen Binärtyp hat.


ist Base64-Verschlüsselung? (Nein. Bitte, nein.)

Es lohnt sich, einen eigenen Abschnitt zu werten, weil das Missverständnis sich weigert zu sterben.

base64 ist ein Darstellung, wie eine Zahl in Hexadezimal zu schreiben. Kein Schlüssel. Kein Geheimnis. Die Dekodierung erfordert nichts als die in RFC 4648 öffentlich gedruckte Alphabettabelle. Alles, was base64-"geschützt" ist, wird so geschützt, wie ein Brief durch Kursivschrift geschützt wird.

Wenn Daten vertraulich sind: ordnungsgemäß verschlüsseln (AES-GCM oder LibsOdium), dann Base64-codieren Sie den Chiffretext, wenn der Kanal Text benötigt Kodierung und Verschlüsselung comp fine - sie sind nur & #39; t substituates Und wenn Sie Integrität statt Geheimhaltung brauchen, das & #39; s ein hash& #39; s job - der Hash-Generator Deckt SHA-256 und Freunde ab.


Wie vergleicht Base64 mit Hex, URL-Codierung und Base85?

base64 Hex (Basis16) URL/Prozent-Codierung ASCII85
Größe Overhead +33% +100% 0–200%, inhaltsabhängig +25%
Alphabet 64 Zeichen 16 Zeichen ASCII + %XX Flucht 85 Zeichen
Von Menschen lesbare Ausgabe kein Eine Art Byte-Grenzen sichtbar Meistens für ASCII-Eingabe kein
Standardmäßig URL-sicher Nein (+, /, =) ja Ja, per Definition kein
Sie werden es in treffen JWTs, MIME, Daten-URIs Hashes, MAC-Adressen, Farbcodes Abfragezeichenfolgen PDF-Intern

Wie ich mich auswähle: verhexen Wenn Menschen die Ausgabe lesen oder vergleichen - Prüfsummen, Verdauungen, alles, was von Augapfel debuggt wird. Prozent-Kodierung Für URL-Text niemals binär. base64 Für binäres Überqueren eines Textkanals - die meisten realen Fälle. ASCII85 Niemals freiwillig, die 8%-Einsparung muss die Kompatibilitätsfragen noch rechtfertigen.


Was ist URL-Safe Base64 und warum existiert es?

Standard Base64 hat ein Problem: + bedeutet "Leerzeichen" in Abfragezeichenfolgen, / ist der Wegtrenner, = Parameter abgrenzt Setzen Sie ein Standard-Base64 Token in eine URL und einige Middleware, irgendwo, wird es verstümmeln - intermittierend, und nur in der Produktion Fragen Sie mich, wie ich weiß.

RFC 4648 Abschnitt 5 definiert den Fix, der normalerweise als base64url bezeichnet wird:

serienmäßig URL-Safe
+ -
/ _
= Polster Normalerweise nur weggelassen

Gleicher Algorithmus, zwei Zeichen vertauscht, Auffüllung weggelassen JWTs verwenden ausschließlich Base64URL - genau deshalb fällt das Einfügen eines JWT-Segments in einen strengen Standard-Base64-Decoder manchmal auf einem Streuner aus - oder _drohen der Toolz.dev-Konverter Behandelt beide Varianten, da ein Decoder, der die Hälfte der realen Base64 ablehnt, kein großer Decoder ist.

Faustregel: Wenn die codierte Zeichenfolge jemals eine URL, einen Dateinamen oder einen HTTP-Header berührt, verwenden Sie die URL-Safe-Variante von Anfang an. Nachrüsten ist ein Fund-und-Ersetzen plus Gebet.


Wie kodiert und dekodiert man im Code?

JavaScript - die Falle, in die ich tappte

Hier ist die naive Version, die ich versendet habe:

btoa('Hello')      // "SGVsbG8=" — great!
btoa('café ☕')    // InvalidCharacterError — the bug from my intro

btoa Vorab der modernen Unicode-Handling und akzeptiert nur Latin-1. Der richtige moderne Ansatz geht explizit durch UTF-8-Bytes:

// Encode: string → UTF-8 bytes → Base64
const bytes = new TextEncoder().encode('café ☕');
const encoded = btoa(String.fromCharCode(...bytes));   // "Y2Fmw6kg4piV"

// Decode: Base64 → bytes → string
const decoded = new TextDecoder().decode(
  Uint8Array.from(atob(encoded), c => c.charCodeAt(0))
); // "café ☕"

(Überspringen Sie in node.js die Zeremonie: Buffer.from(str, 'utf8').toString('base64').)

Python

import base64

encoded = base64.b64encode('café ☕'.encode('utf-8')).decode('ascii')
decoded = base64.b64decode(encoded).decode('utf-8')

# URL-safe variant — note -_ instead of +/
token = base64.urlsafe_b64encode(b'binary\xfb\xff').decode('ascii')

Python macht das Richtige offensichtlich: Sie müssen Byte übergeben, so dass der Schritt ENCODE-TO-UTF-8 nicht vergessen werden kann. Ich wünsche btoa Wurde mit der gleichen Wirbelsäule entworfen.

PHP

$encoded = base64_encode('café ☕');   // handles bytes as-is — PHP strings ARE bytes
$decoded = base64_decode($encoded);

// URL-safe requires manual translation — a WordPress-plugin-developer classic:
$urlSafe = rtrim(strtr($encoded, '+/', '-_'), '=');

das strtr/rtrim Line ist in jeder PHP-Codebasis erschienen, an der ich jemals gearbeitet habe, einschließlich WP Adminify. PHP hat nie eine integrierte URL-sichere Variante erhalten, daher schreiben wir alle die gleichen zwei Zeilen.


Häufig gestellte Fragen

Wofür wird Base64-Codierung verwendet?

Es konvertiert binäre Daten in ASCII-Text, damit es Systeme durchlaufen kann, die nur Text verarbeiten: JSON-Nutzdaten, URLs, E-Mail (MIME), HTTP-Header. Sie treffen es am häufigsten in JWT-Tokens, data: URIs für Inline-Images, Kubernetes-Geheimnisse und API-Nutzdaten mit Dateien. Es ist ein Transportformat, kein Speicher- oder Sicherheitsformat.

Ist base64 dasselbe wie Verschlüsselung?

Nein, und die beiden zu verwechseln, verursacht echte Sicherheitsvorfälle. Base64 hat keinen Schlüssel - für die Dekodierung ist nur die öffentliche Alphabettabelle erforderlich und es wird ein Einfügen in jede beliebige eingefügt Decoderdrohen Verschlüsseln Sie zuerst mit einem realen Algorithmus (AES-GCM) und codieren Sie dann den Chiffretext, wenn der Kanal Text benötigt.

Warum erhöht Base64 die Daten um 33%?

Jede Base64 trägt 6 Bit Information, belegt aber ein volles 8-Bit-Byte, so werden aus 3 Byte Eingabe immer 4 Zeichen 4/3 Zeichen Ausgabe - 1.33. It&#39; nimmt feste Kosten des Formats ein, die vom Design unvermeidbar sind Wenn es auf die Größe ankommt, komprimieren Sie vor der Kodierung, nie nach - kodierte Ausgabe sieht zufällig aus und komprimiert schrecklich.

Was ist der Unterschied zwischen Base64 und Base64url?

base64url-Swaps + auf - und / auf _, und lässt normalerweise die = Auffüllen, so überlebt die Ausgabe URLs, Dateinamen, und Header ohne zu entkommen Gleicher Algorithmus sonst, definiert in RFC 4648 Abschnitt 5. JWTs verwenden ausschließlich Base64URL - weshalb sich manchmal strenge Standard-Base64-Decoder daran festsetzen.

Warum löst btoa () InvalidCharacterError aus?

Ihre Zeichenfolge enthält Zeichen außerhalb von Latein-1 - ein Emoji, ein Akzentzeichen, jede nicht-westliche Schrift. btoa ist eine API aus den 1990er Jahren, die vor der sinnvollen Unicode-Handling liegt. Codieren Sie zuerst mit UTF-8-Bytes mit TextEncoder, dann base64 die Bytes; ich habe genau diesen Fehler in einem Produktionstool ausgeliefert, also kein Urteil.

Wie kann ich feststellen, ob eine Zeichenfolge base64 ist?

Nur gültige Base64 verwendet A–Z, a–z, 0–9, +, / (oder -, _ für URL-Safe), optionales Trailing =Mit einer Länge, die & #39; beim Aufpolstern ein Vielfaches von 4. Aber auch viele gewöhnliche Wörter passen zu diesem Muster - cafe ist gültig base64, die zu Müllbytes dekodiert. Der eigentliche Test ist die Dekodierung und die Überprüfung, ob die Ausgabe sinnvoll ist.

Warum hat meine Base64-Saite am Ende eine streunende Zeile?

weil echo fügt einen vorher hinzu base64 sieht es immer so echo "hunter2" | base64 Codiert acht Bytes, nicht sieben. printf oder echo -n stattdessen. Dies ist die häufigste Ursache für Kubernetes-Geheimnisse, die im Manifest richtig aussehen und zur Laufzeit fehlschlagen: Das dekodierte Passwort trägt eine unsichtbare Trailing \ndrohen der base64 Befehl wickelt auch Ausgabe in 76 Spalten auf einigen Systemen - pass -w 0 auf GNU Coreutils, um es zu unterdrücken.

Wie dekodiere ich einen JWT-Token von Hand?

Teilen Sie den Token an seinen beiden Punkten, nehmen Sie das erste Segment (Header) und das zweite (Nutzlast) und führen Sie jeweils durch a Base64-Decoder- they&#39;re Base64URL, verwenden Sie also ein Tool, das akzeptiert - und _drohen Formatieren Sie dann das resultierende JSON in a JSON-Formater die Behauptungen zu lesen. Fügen Sie niemals Produktions-Token in serverseitige Tools ein, nur auf der Clientseite.

Wie codiere ich ein Bild oder eine Datei in base64?

Lesen Sie die Datei als Bytes, dann base64 diese Bytes und stellen Sie einen Data-URI-Header wie data:image/png;base64, Ein Browser kann es also inline rendern. In Javascript, FileReader.readAsDataURL() Erledigt beide Schritte für Sie; in der Befehlszeile, base64 logo.png Druckt die Rohkodierung Behalten Sie es bei kleinen Vermögenswerten - die Größensteuer von 33% macht Base64 zu einer schlechten Passform für alles, was groß ist, und Big-Data-URIs blähen Ihr HTML oder CSS auf.

Wie dekodiere ich base64 in Javascript, Python oder im Terminal?

In modernem Javascript dekodieren Sie Unicode-sicher mit new TextDecoder().decode(Uint8Array.from(atob(str), c => c.charCodeAt(0))) eher als nackt atobdrohen In Python, base64.b64decode(str) Bytes zurückgibt - Anruf .decode('utf-8') Für Text. In einem Terminal, echo "aGk=" | base64 -d (oder --decode).). Alle drei erwarten Standard Base64, also übersetzen -/_ zurück zu +// Zuerst, wenn Sie eine base64url-Zeichenfolge behandeln.


Der Mitnehmen

Base64 ist ein 30 Jahre alter Bit-Shuffling-Trick, der stillschweigend die Hälfte der modernen Web - Auth-Token, Anhänge, Inline-Assets, Geheimnisse-die-sagen&#39; t-geheim hält Verstehen Sie die 6-Bit-Neugruppierung, respektieren Sie die 33% Steuer, verwechseln Sie sie niemals mit Verschlüsselung und greifen Sie überall dort, wo eine URL beteiligt ist, nach der URL-sicheren Variante. That&#39;s 95% der praktischen Base64-Meisterung.

Für den praktischen Teil ist Base64-Konverter auf Toolz.dev Standard - und URL-sichere Kodierung vollständig in Ihrem Browser tut - von jemandem gebaut, der die Unicode-Lektion auf die harte Tour gelernt hat, so dass Sie nicht & #39; müssen.

Mehr in dieser Serie: das volle Anleitung für die Coding-Tools deckt den Rest der täglichen Fahrerdienstprogramme ab, die Regex Builder-Anleitung Tackle die anderen Skill-Entwickler vor, und da die Hälfte der Base64-Debugging in JSON endet, Ultimative JSON-Tools-An ist die natürliche nächste Lesung.


Verwandte Artikel:

Frequently Asked Questions

It converts binary data into ASCII text so it can pass through systems that only handle text: JSON payloads, URLs, email (MIME), HTTP headers. You meet it most often in JWT tokens, data: URIs for inline images, Kubernetes Secrets, and API payloads carrying files. It's a transport format, not a storage or security format.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!