bitlvl
DE

Spickzettel Base64 & Kodierungen

Alles über Base64, was sich nachzuschlagen lohnt, einschließlich der Einzeiler für jede Sprache.

Passt auf eine A4-/Letter-Seite im Hochformat; mit „Als PDF speichern“ im Druckdialog behalten Sie eine Kopie.

Alphabet (Wert → Zeichen)

0 A1 B2 C3 D4 E5 F6 G7 H
8 I9 J10 K11 L12 M13 N14 O15 P
16 Q17 R18 S19 T20 U21 V22 W23 X
24 Y25 Z26 a27 b28 c29 d30 e31 f
32 g33 h34 i35 j36 k37 l38 m39 n
40 o41 p42 q43 r44 s45 t46 u47 v
48 w49 x50 y51 z52 053 154 255 3
56 457 558 659 760 861 962 +63 /

URL-sicher (RFC 4648 §5): 62 = -, 63 = _, meist ohne Padding. Padding-Zeichen: =.

So funktioniert es

Bytes:  01001000 01101001 00100001     "Hi!"
6-Bit:  010010 000110 100100 100001
Zeichen:  S      G      k      h       "SGkh"
"Hi"  → 01001000 01101001 (16 Bit) → 010010 000110 1001(00) → "SGk" + "="
"H"   → 8 Bit → 010010 00(0000)          → "SA"  + "=="
Eingabelänge mod 3 = 0kein Padding
= 12 Zeichen + ==
= 23 Zeichen + =
Ausgabegröße⌈n / 3⌉ × 4 (≈ +33 %)
Eingabegröße aus AusgabeLänge × 3 / 4 − Padding
MIME (RFC 2045)Zeilen à 76 Zeichen, CRLF
PEMZeilen à 64 Zeichen

Varianten

Base64A–Z a–z 0–9 + /; E-Mail, JSON, data:-URLs
Base64URL- und _ statt + /; JWT, OAuth, Dateinamen
Base32A–Z 2–7; TOTP-Secrets, schreibungsunabhängig, +60 %
Base32hex0–9 A–V; sortiert numerisch (DNSSEC NSEC3)
Hex (Base16)0–9 a–f; +100 %, trivial zu lesen
Base58ohne 0 O I l; Bitcoin-Adressen
Base85 / Ascii85+25 %; PDF, git-Binär-Diffs
bcrypt-Base64./A–Z a–z 0–9, andere Reihenfolge; nur in bcrypt-Hashes

Befehle

base64 file; base64 -dGNU coreutils (-w0 ohne Umbruch)
openssl base64 -AOpenSSL (-A = eine Zeile)
echo -n 'text' | base64-n: kein Zeilenumbruch am Ende der Eingabe
base64.b64encode(b), b64decode(s)Python; urlsafe_b64encode für URL-sicher
btoa(s), atob(s)JS, nur Latin-1-Strings; für UTF-8 TextEncoder + fromCharCode oder Buffer in Node
Buffer.from(s).toString('base64'); Buffer.from(b64, 'base64')Node.js (auch 'base64url')
base64.StdEncoding.EncodeToString(b)Go; RawURLEncoding für URL-sicher ohne Padding
base64_encode(), base64_decode()PHP
Base64.strict_encode64(s)Ruby (encode64 bricht Zeilen um)
[Convert]::ToBase64String($bytes)PowerShell
SELECT TO_BASE64('x'); encode('x','base64')MySQL; PostgreSQL

Merken

  • Base64 ist keine Verschlüsselung; jeder kann es dekodieren.
  • Dekodierfehler sind meist ein fehlendes =, ein URL-sicherer String in einem strengen Decoder oder Zeilenumbrüche.
  • Text muss zuerst zu Bytes werden: UTF-8 wählen und das auch sagen.
  • Eine data:-URL ist data:<mime>;base64,<daten>.

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Fragen

Wo kodiere oder dekodiere ich?

Das Base64-Tool verarbeitet Text und Dateien in beide Richtungen, auch URL-sichere und ungepaddete Eingaben, und zeigt die dekodierten Bytes als Hex.