Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

Base64

aus Wikipedia, der freien Enzyklopädie

Base64 ist ein Verfahren zurKodierung von 8-Bit-Binärdaten (z. B. ausführbare Programme,ZIP-Dateien oder Bilder) in eine Zeichenfolge, die nur aus lesbarenASCII-Zeichen besteht.

Es findet im Internet-StandardMultipurpose Internet Mail Extensions (MIME) Anwendung und wird dort zum Versenden vonE-Mail-Anhängen verwendet. Nötig ist dies, um den problemlosen Transport von beliebigen Binärdaten zu gewährleisten, daSMTP in seiner ursprünglichen Fassung nur für den Versand von 7-Bit-ASCII-Zeichen ausgelegt war. Durch die Kodierung steigt der Platzbedarf des Datenstroms um 33–36 % (33 % durch die Kodierung selbst, bis zu weitere 3 % durch die im kodierten Datenstrom eingefügten Zeilenumbrüche). Base64 wird zum Beispiel auch zur Kodierung von Benutzernamen und Passwort in derHTTP-Basisauthentifizierung und zur Übertragung vonSSH-Server-Zertifikaten verwendet.

Vorgehen bei der Kodierung

[Bearbeiten |Quelltext bearbeiten]

Zur Kodierung werden die ZeichenA–Z,a–z,0–9,+ und/ verwendet sowie= am Ende. Da diese Zeichen auch imExtended Binary Coded Decimals Interchange Code (EBCDIC) vorkommen (wenn auch an anderen Codepositionen), ist ein verlustfreier Datenaustausch zwischen diesen Plattformen gesichert.

Kodierung von Base64

Zur Kodierung werden jeweils dreiByte des Bytestroms (= 24 Bit) in vier 6-Bit-Blöcke aufgeteilt. Jeder dieser 6-Bit-Blöcke bildet eine Zahl von 0 bis 63. Diese Zahlen werden anhand der nachfolgenden Umsetzungstabelle in „druckbare ASCII-Zeichen“ umgewandelt und ausgegeben. Der Name des Algorithmus erklärt sich durch ebendiesen Umstand – jedem Zeichen des kodierten Datenstroms lässt sich eine Zahl von 0 bis 63 zuordnen (siehe Tabelle). Mathematisch betrachtet gleicht dies einemStellenwertsystem der Basis 64.

Padding

[Bearbeiten |Quelltext bearbeiten]

Falls die Gesamtanzahl der Eingabebytes nicht durch drei teilbar ist, beinhaltet der letzte Eingabeblock weniger als 24 Bits. In diesem Fall ist einPadding der Eingabedaten erforderlich. An den Eingabeblock werden Nullbits angehängt, bis die Länge durch 6 teilbar ist. Anschließend wird die Ausgabe mit einem oder zwei= Zeichen aufgefüllt. Wenn der Eingabeblock 8 Bit lang ist, werden 4 Nullbits angehängt und zwei= Zeichen ausgegeben. Wenn der Eingabeblock 16 Bit lang ist, werden 2 Nullbits angehängt und ein= Zeichen ausgegeben.[1]

Beispiel: Padding
Eingabebytes
(Hex)
Anzahl
Bits
aufgefüllt auf durch 6 teilbare Bitzahl
(Binärdarstellung, Senkrechtstrich trennt Padding-Bits)
Base64
(ohne Ausgabe-Padding)
Base64
(mit Ausgabe-Padding)
008000000 00|0000AAAA==
00 0016000000 000000 0000|00AAAAAA=
00 00 0024000000 000000 000000 000000AAAAAAAA
FF8111111 11|0000/w/w==
FF FF16111111 111111 1111|00//8//8=
FF FF FF24111111 111111 111111 111111////////

Da sich die Anzahl der ursprünglichen Bytes immer eindeutig aus der Anzahl der Base64-Eingabe-Zeichen ermitteln lässt, wird in manchen Kontexten und Protokollen kein Padding verwendet (abweichend von der ursprünglichen Base64-Definition).

Platzbedarf

[Bearbeiten |Quelltext bearbeiten]

Bei einer zu kodierenden Eingabe mitn{\displaystyle n} Byte beträgt der Platzbedarf für den Base64-kodierten Inhalt (ohne Zeilenumbrüche)z=4n3{\displaystyle z=4\cdot \lceil {\tfrac {n}{3}}\rceil } Zeichen. (Die Klammern um den Bruch stehen für dieaufrundende Ganzzahldivision.)

In der Darstellung von sehr langen Base64-Strings werden diese oftmals (zum Beispiel nach jeweils 64 Zeichen) umbrochen, also ein Zeilenumbruch eingefügt. Solche Zeilenumbrüche sind für die Dekodierung nicht von Belang und werden ignoriert.

Base64-Zeichensatz

[Bearbeiten |Quelltext bearbeiten]
WertZeichenWertZeichenWertZeichenWertZeichen
dez.binärhex.dez.binärhex.dez.binärhex.dez.binärhex.
000000000A1601000010Q3210000020g4811000030w
100000101B1701000111R3310000121h4911000131x
200001002C1801001012S3410001022i5011001032y
300001103D1901001113T3510001123j5111001133z
400010004E2001010014U3610010024k52110100340
500010105F2101010115V3710010125l53110101351
600011006G2201011016W3810011026m54110110362
700011107H2301011117X3910011127n55110111373
800100008I2401100018Y4010100028o56111000384
900100109J2501100119Z4110100129p57111001395
100010100AK260110101Aa421010102Aq581110103A6
110010110BL270110111Bb431010112Br591110113B7
120011000CM280111001Cc441011002Cs601111003C8
130011010DN290111011Dd451011012Dt611111013D9
140011100EO300111101Ee461011102Eu621111103E+
150011110FP310111111Ff471011112Fv631111113F/

Base64url

[Bearbeiten |Quelltext bearbeiten]

InDateinamen undURLs können die Zeichen+,/ und= nicht verwendet werden, da sie dort für besondere Funktionen reserviert sind. In einem solchen Fall wird mitbase64url eine inkompatible Abwandlung beschrieben. Die Zeichen+ und/ werden dann durch- (Minus, ASCII 2Dhex) und_ (Unterstrich, ASCII 5Fhex) ersetzt. Das Füllzeichen= am Ende wirdprozentkodiert zu%3d, kann aber entfallen, wenn die Länge des Strings bekannt ist.[2]

Javascript-Funktionen

[Bearbeiten |Quelltext bearbeiten]

In Javascript gibt es die Funktionen atob() und btoa(), beschrieben in HTML5 draft specification.[3][4][5]
btoa() konvertiert beliebige Zeichen aus dem Bereich 0..255 in Base64-Code und fügt ggf. die Füllzeichen ein
atob() konvertiert Base64-Code zu beliebigen Zeichen. Die Eingabe der Füllzeichen ist hier optional.
Als Beispiel die Kodierung des Dateianfangs einer GIF-Datei:btoa("GIF89a")"R0lGODlh".

Beispiele

[Bearbeiten |Quelltext bearbeiten]
Polyfon zwitschernd aßen Mäxchens Vögel Rüben, Joghurt und Quark

Dieser 64 Zeichen lange Text wäre inUTF-8-Kodierung 68 Byte lang, da in UTF-8 dasEszett und dieUmlaute jeweils eine Länge von zwei Bytes haben. Mit der Umwandlung zu Base64 wird daraus eine 92 Zeichen lange Base64-Zeichenkette:

UG9seWZvbiB6d2l0c2NoZXJuZCBhw59lbiBNw6R4Y2hlbnMgVsO2Z2VsIFLDvGJlbiwgSm9naHVydCB1bmQgUXVhcms=

Erkennbar ist hierbei, dass Base64 eine für Menschen nicht lesbare Kodierung erstellt. Dieser Umstand ist jedochnicht als wirksameVerschlüsselung anzusehen, da der Datenstrom der Eingabe sehr leicht aus der Zeichenfolge am Ausgang zurückgewonnen werden kann, sobald diese als Base64-kodiert erkannt ist.

Umwandlung der Zeichen „Pol“ in Base64
PhaseDatenAnmerkungen
UrsprungstextPol
Unicode-ZeichenU+0050U+006FU+006CgemäßUnicodeblock Basis-Lateinisch
Bytes0x500x6F0x6CgemäßUTF-8
Binärschreibweise0101 00000110 11110110 1100sieheHexadezimalsystem
Gruppierung in 6er-Blöcken010100000110111101101100jeder 6er-Block entspricht einem Base64-Zeichen
Codierung als Base64-ZeichenUG9sgemäß der Tabelle oben von „binär“ nach „Zeichen“
Ohne LeerzeichenUG9s

Radix-64

[Bearbeiten |Quelltext bearbeiten]

DasOpenPGP-Datenformat definiert eine Variante von Base64, dieASCII Armor genannt wird. Diese besteht aus genormten Kopf- und Fußzeilen, welche zum einen den Anfang und das Ende der Daten anzeigen, zum anderen einen Hinweis für den menschlichen Leser geben, welche Art von Daten kodiert ist und mit welchem Programm die Daten erzeugt worden sind.

An die Base64-kodierten Daten wird einePrüfsumme (CRC-24) angehängt; dieses leicht modifizierte Verfahren trägt den NamenRadix-64.

-----BEGIN PGP MESSAGE-----Version: GnuPG v1.4.10 (GNU/Linux)y0piAGcFr3BQb2x5Zm9uIHp3aXRzY2hlcm5kIGHDn2VuIE3DpHhjaGVucyBWw7ZnZWwgUsO8YmVuLCBKb2dodXJ0IHVuZCBRdWFyaw===L3gC-----END PGP MESSAGE-----

Der Base64-Teil in diesem Beispiel beginnt mity0pi… und endet mit…yaw==. Anschließend folgt ein Zeilenumbruch, ein Gleichheitszeichen und die Base64-kodierteCRC-24-Prüfsumme über die Original-Nachricht (alsovor der Base64-Kodierung).

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Normen und Standards

[Bearbeiten |Quelltext bearbeiten]
  • J. Linn: RFC:1421 –Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures. Februar 1993 (löstRFC 1113 ab, historisch, englisch).
  • N. Borenstein, N. Freed: RFC:1521 –MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies. September 1993 – Standard: [draft] (löstRFC 1341 ab, aktualisiert durchRFC 1590, veraltet, englisch).
  • S. Josefsson: RFC:3548 –The Base16, Base32, and Base64 Data Encodings [Errata: RFC3548]. Juli 2003 (aktualisiert durchRFC 4648, veraltet, abgelöst durch RFC 4648, englisch).
  • S. Josefsson: RFC:4648 –The Base16, Base32, and Base64 Data Encodings [Errata: RFC4648]. Oktober 2006 – Standard: [proposed] (löstRFC 3548 ab, englisch).
  • J. Callas, L. Donnerhacke, H. Finney, D. Shaw, R. Thayer: RFC:4880 –OpenPGP Message Format [Errata: RFC4880]. November 2007 – Standard: [proposed] (aktualisiert durchRFC 5581, löst RFC 1991 und RFC 2440 ab, englisch).

Weblinks

[Bearbeiten |Quelltext bearbeiten]

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. RFC:4648 –The Base16, Base32, and Base64 Data Encodings. Oktober 2006, Abschnitt 4 (englisch).
  2. S. Josefsson: RFC:4648 –The Base16, Base32, and Base64 Data Encodings [Errata: RFC4648]. Oktober 2006 – Standard: [proposed] (löstRFC 3548 ab, englisch).
  3. HTML Living Standard. Abgerufen am 31. Juli 2025. 
  4. btoa. In: Selfhtml. Abgerufen am 31. Juli 2025. 
  5. Window: btoa() method. Mozilla, abgerufen am 31. Juli 2025. 
Stellenwertsysteme (Basis/Grundzahl)

Unärsystem (1) •Dualsystem (2) •Ternärsystem (3) •Quaternärsystem (4) •Quinärsystem (5) •Senärsystem (6) •Septenärsystem (7) •Oktalsystem (8) •Dezimalsystem (10) •Duodezimalsystem (12) •Hexadezimalsystem (16) •Vigesimalsystem (20) •Base32 (32) •Base58 (58) •Sexagesimalsystem (60) •Base64 (64) •Base85 (85)

Abgerufen von „https://de.wikipedia.org/w/index.php?title=Base64&oldid=259190352
Kategorien:

[8]ページ先頭

©2009-2026 Movatter.jp