Basis64

Im Computerprogrammierung, Basis64 ist eine Gruppe von Binär-bis-Text-Kodierung Schemata, die darstellen Binärdaten (Insbesondere eine Sequenz von 8-Bit-Bytes) in Sequenzen von 24 Bits, die durch vier 6-Bit-Basis 64-Ziffern dargestellt werden können.

Base64 ist für alle Binär- bis Text-Codierungsschemata gemeinsam und dient zum Tragen von Daten, die in Binärformaten über Kanäle hinweg gespeichert sind, die nur zuverlässige Textinhalte unterstützen. Basis64 ist besonders auf dem vorhanden Weltweites Netz[1] Wo eine ihrer Verwendungszwecke die Fähigkeit zum Einbetten ist Bilddateien oder andere binäre Vermögenswerte innerhalb von Textvermögen wie z. Html und CSS Dateien.[2]

Base64 wird auch häufig zum Senden von E-Mail-Anhängen verwendet. Dies ist erforderlich, weil SMTP -in seiner ursprünglichen Form-wurde entwickelt, um nur 7-Bit-ASCII-Zeichen zu transportieren. Diese Codierung verursacht einen Overhead von 33–37% (33% durch die Codierung selbst; bis zu 4% mehr durch die eingefügten Linienbrüche).

Entwurf

Der jeweilige Satz von 64 Zeichen, der die 64 -stelligen Werte für die Basis darstellt, variiert zwischen den Implementierungen. Die allgemeine Strategie besteht darin, 64 Zeichen zu wählen, die den meisten Codierungen gemeinsam sind und auch die sind druckbar. Diese Kombination lässt die Daten wahrscheinlich nicht durch Informationssysteme wie E -Mails geändert, die traditionell nicht waren 8-Bit sauber.[3] Zum Beispiel, MIME's Base64 Implementierung verwendet A-Z, a-z, und 0-9 für die ersten 62 Werte. Andere Variationen teilen diese Eigenschaft, unterscheiden sich jedoch in den für die letzten beiden Werte ausgewählten Symbole. Ein Beispiel ist UTF-7.

Die frühesten Instanzen dieser Art von Codierung wurden für die Wahl der Kommunikation zwischen Systemen erstellt, die gleich ausgeführt werden OS, zum Beispiel, Uuencode zum Unix und Binhex für die TRS-80 (später für die angepasst Macintosh) und könnten daher mehr Annahmen darüber treffen, welche Charaktere sicher zu bedienen waren. Zum Beispiel verwendet Uuencode Großbuchstaben, Ziffern und viele Interpunktionszeichen, aber kein Kleinbuchstaben.[4][5][6][3]

Base64 Tabelle von RFC 4648

Dies ist das in Base64 -Alphabet, das in definiert ist RFC 4648 §4 . Siehe auch Varianten Zusammenfassung (unter).

Index Binär Verkohlen Index Binär Verkohlen Index Binär Verkohlen Index Binär Verkohlen
0 000000 A 16 010000 Q 32 100000 g 48 110000 w
1 000001 B 17 010001 R 33 100001 h 49 110001 x
2 000010 C 18 010010 S 34 100010 i 50 110010 y
3 000011 D 19 010011 T 35 100011 j 51 110011 z
4 000100 E 20 010100 U 36 100100 k 52 110100 0
5 000101 F 21 010101 V 37 100101 l 53 110101 1
6 000110 G 22 010110 W 38 100110 m 54 110110 2
7 000111 H 23 010111 X 39 100111 n 55 110111 3
8 001000 I 24 011000 Y 40 101000 o 56 111000 4
9 001001 J 25 011001 Z 41 101001 p 57 111001 5
10 001010 K 26 011010 a 42 101010 q 58 111010 6
11 001011 L 27 011011 b 43 101011 r 59 111011 7
12 001100 M 28 011100 c 44 101100 s 60 111100 8
13 001101 N 29 011101 d 45 101101 t 61 111101 9
14 001110 O 30 011110 e 46 101110 u 62 111110 +
15 001111 P 31 011111 f 47 101111 v 63 111111 /
Polsterung =

Beispiele

Das folgende Beispiel verwendet ASCII Einfachheitlich Text, aber dies ist kein typischer Anwendungsfall, da er bereits sicher auf alle Systeme übertragen werden kann, die Base64 verarbeiten können. Die typischere Verwendung ist zu codieren Binärdaten (wie ein Bild); Die resultierenden Base64 -Daten enthalten nur 64 verschiedene ASCII -Zeichen, die alle zuverlässig über Systeme übertragen werden können, die die Rohquellen -Bytes beschädigen können.

Hier ist ein bekannt Idiom aus verteiltes Computer:

Viele Hände machen leichte Arbeit.

Wenn das Zitat in Base64 codiert wird, wird es als Byte-Sequenz von 8-Bit-Padd dargestellt ASCII Charaktere codiert MIMEDas Basis64 -Schema wie folgt (Neulinien und weiße Räume können überall vorhanden sein, aber zum Dekodieren ignoriert werden):

Twfuesboyw5kcyBtywtLIGxpz2H0IHDVCMSU

Im obigen Zitat der codierte Wert von Mann ist Twfu. In ASCII codiert, die Zeichen M, a, und n werden als Bytewerte gespeichert 77, 97, und 110, die die 8-Bit-Binärwerte sind 01001101, 01100001, und 01101110. Diese drei Werte werden zu einer 24-Bit-Schnur zusammengefügt, die erzeugt 010011010110000101101110. Gruppen von 6 Bit (6 Bit haben maximal 26= 64 verschiedene Binärwerte) sind in einzelne Zahlen umgewandelt Von Anfang bis Ende (in diesem Fall gibt es vier Zahlen in einer 24-Bit-Zeichenfolge), die dann in ihre entsprechenden Basis64-Zeichenwerte konvertiert werden.

Wie dieses Beispiel zeigt, konvertiert Base64 Coding drei Oktetten in vier codierte Zeichen.

Quelle Text (ASCII) M a n
Oktetten 77 (0x4d) 97 (0x61) 110 (0x6e)
Bits 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Basis64
codiert
Sextets 19 22 5 46
Charakter T W F u
Oktetten 84 (0x54) 87 (0x57) 70 (0x46) 117 (0x75)

= Padding -Zeichen können hinzugefügt werden, um den letzten codierten Block zu erstellen, das vier Basis64 -Zeichen enthält.

Hexadezimal zu Oktal Die Transformation ist nützlich, um zwischen Binär und Base zu konvertieren64. Sowohl für fortschrittliche Taschenrechner als auch für Programmiersprachen ist eine solche Konvertierung verfügbar. Zum Beispiel beträgt die hexadezimale Darstellung der oben genannten 24 Bit 4D616E. Die Oktalpräparation beträgt 23260556. Diese 8 Oktalstellen können in Paare aufgeteilt werden ((23 26 05 56), und jedes Paar wurde in Dezimalheit umgewandelt, um zu ergeben 19 22 05 46. Unter Verwendung dieser vier Dezimalzahlen als Indizes für das Basis64 -Alphabet sind die entsprechenden ASCII -Zeichen Twfu.

Wenn es nur zwei signifikante Eingangstarte (z. B. 'MA') gibt oder wenn die letzte Eingangsgruppe nur zwei Oktetten enthält, werden alle 16 Bit in den ersten drei Basis 64 -Ziffern (18 Bit) erfasst. die Zwei am wenigsten signifikante Bits des letzten inhaltshaltigen 6-Bit = Polstercharakter):

Quelle Text (ASCII) M a
Oktetten 77 (0x4d) 97 (0x61)
Bits 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0
Basis64
codiert
Sextets 19 22 4 Polsterung
Charakter T W E =
Oktetten 84 (0x54) 87 (0x57) 69 (0x45) 61 (0x3d)

Wenn es nur ein signifikantes Eingangsoktett (z. B. 'M') gibt oder wenn die letzte Eingangsgruppe nur ein Oktett enthält, werden alle 8 Bit in den ersten beiden Basis 64 -Ziffern (12 Bit) erfasst. die Vier am wenigsten signifikante Bits des letzten inhaltshaltigen 6-Bit = Padding -Charaktere):

Quelle Text (ASCII) M
Oktetten 77 (0x4d)
Bits 0 1 0 0 1 1 0 1 0 0 0 0
Basis64
codiert
Sextets 19 16 Polsterung Polsterung
Charakter T Q = =
Oktetten 84 (0x54) 81 (0x51) 61 (0x3d) 61 (0x3d)

Ausgangspolsterung

Da Base64 eine Sechs-Bit-Codierung ist und die dekodierten Werte in 8-Bit-Oktetten auf einem modernen Computer unterteilt sind, alle vier Zeichen von Base64-kodierter Text (4 Sextets = 4 × 6 = 24 Bit) repräsentiert drei Oktetten nichtcodierter Text oder Daten (3 Oktetten = 3 × 8 = 24 Bit). Dies bedeutet, dass, wenn die Länge des nichtcodierten Eingangs nicht ein Vielfaches von drei ist, die codierte Ausgabe auf Polsterung hinzugefügt werden muss, sodass seine Länge ein Vielfaches von vier ist. Der Polstercharakter ist =, was angibt, dass keine weiteren Bits erforderlich sind, um die Eingabe vollständig zu codieren. (Dies unterscheidet sich von ADies bedeutet, dass die verbleibenden Bits alle Nullen sind.) Das folgende Beispiel zeigt, wie das Abschneiden der Eingabe des obigen Zitats die Ausgangspolsterung ändert:

Eingang Ausgabe Polsterung
Text Länge Text Länge
hell work. 11 BGLNAHQGD29Yay4 = 16 1
hell work 10 BGLNAHQGD29Yaw == 16 2
hell wor 9 BGLNAHQGD29Y 12 0
hell wo 8 BGLNAHQGD28 = 12 1
hell w 7 BGLNAHQGDW == 12 2

Das Polstercharakter ist für die Dekodierung nicht wesentlich, da die Anzahl fehlender Bytes aus der Länge des codierten Textes abgeleitet werden kann. In einigen Implementierungen ist der Polstercharakter obligatorisch, während er für andere nicht verwendet wird. Eine Ausnahme, bei der Padding -Zeichen erforderlich sind, ist, wenn mehrere base64 -codierte Dateien verkettet wurden.

Decodierungsbasis64 mit Polsterung

Beim Dekodieren von Basis64 -Text werden vier Zeichen normalerweise auf drei Bytes konvertiert. Die einzigen Ausnahmen sind, wenn Padding -Zeichen existieren. Ein einzelnes = zeigt an, dass die vier Zeichen auf nur zwei Bytes dekodieren werden, während == Zeigt an, dass die vier Zeichen nur zu einem einzigen Byte dekodieren. Zum Beispiel:

Codiert Polsterung Länge Dekodiert
BGLNAHQGDW == == 1 hell w
BGLNAHQGD28 = = 2 hell wo
BGLNAHQGD29Y Keiner 3 hell wor

Decodierungsbasis64 ohne Polsterung

Ohne Polsterung, nach normaler Dekodierung von vier Zeichen und drei Bytes immer wieder, können weniger als vier codierte Zeichen übrig bleiben. In dieser Situation können nur zwei oder drei Zeichen bleiben. Ein einzelner verbleibender codierter Zeichen ist nicht möglich, da ein einzelnes Basis64 -Zeichen nur 6 Bit enthält und 8 Bits erforderlich sind, um ein Byte zu erstellen trägt seine ersten 2 Bits bei. Zum Beispiel:

Länge Codiert Länge Dekodiert
2 BGLNAHQGdw 1 hell w
3 BGLNAHQGD28 2 hell wo
4 BGLNAHQGD29Y 3 hell wor

Implementierungen und Geschichte

Varianten Zusammenfassungstabelle

Implementierungen können einige Einschränkungen für das Alphabet haben, das zur Darstellung einiger Bitmuster verwendet wird. Dies betrifft insbesondere die letzten beiden Zeichen, die im Alphabet an den Positionen 62 und 63 verwendet werden, und das für die Polsterung verwendete Charakter (die in einigen Protokollen oder in anderen nicht entfernt werden kann). Die folgende Tabelle fasst diese bekannten Varianten zusammen und liefert Links zu den folgenden Unterabschnitten.

Codierung Codierung von Zeichen Getrennte Codierung von Linien Entschlüsseln nicht kodierender Zeichen
62. 63. Pad Separatoren Länge Überprüfung
RFC 1421: Base64 für Datenschutzverbesserte Mail (veraltet) + / = obligatorisch Cr+lf 64 oder niedriger für die letzte Zeile Nein Nein
RFC 2045: Base64 Transfer -Codierung für MIME + / = obligatorisch Cr+lf Höchstens 76 Nein Weggeworfen
RFC 2152: Base64 für UTF-7 + / Nein Nein Nein
RFC 3501: Base64 Codierung für IMAP -Mailboxnamen + , Nein Nein Nein
RFC 4648 §4: Base64 (Standard)[a] + / = Optional Nein Nein
RFC 4648 §5: Base64url (URL- und Dateiname-Safe-Standard)[a] - _ = Optional Nein Nein
RFC 4880: Radix-64 für OpenPGP + / = obligatorisch Cr+lf Höchstens 76 Radix-64 codiert 24-Bit CRC Nein
Andere Variationen sehen Anwendungen, die nicht mit RFC 4648 Base64 kompatibel sind (unter)
  1. ^ a b Es ist wichtig zu beachten, dass diese Variante gemeinsame Merkmale liefern soll, bei denen sie nicht auf Implementierungen spezialisiert sind, um ein robustes Engineering zu gewährleisten. Dies ist insbesondere angesichts der separaten Liniencodierungen und -beschränkungen, die nicht berücksichtigt wurden, wenn frühere Standards zur Verwendung an anderer Stelle kooptiert wurden. Daher können die hier angegebenen Merkmale überdehnt sein.

Datenschutzverbesserte Mail

Die erste bekannte standardisierte Verwendung der Codierung, die jetzt MIME BASE64 genannt wurde, war in der Privatsphäre verbesserte elektronische Post (PEM) Protokoll, vorgeschlagen von RFC 989 1987 definiert PEM ein "druckbares Codierungsschema", das Base64 -Codierung verwendet, um eine willkürliche Abfolge von zu transformieren Oktetten zu einem Format, das in kurzen Zeilen von 6-Bit SMTP.[7]

Die aktuelle Version von PEM (angegeben in RFC 1421) verwendet ein 64-Charakter-Alphabet, das aus oberen und unteren Fall besteht Römische Buchstaben (AZ, az), die Ziffern (09), und die + und / Symbole. Das = Das Symbol wird auch als Polstersuffix verwendet.[4] Die ursprüngliche Spezifikation, RFC 989verwendete zusätzlich die * Symbol zum Abgrenzung codierter, aber unverschlüsselter Daten innerhalb des Ausgabestreams.

Um Daten in PEM -druckbare Codierung umzuwandeln, wird das erste Byte in der platziert am bedeutendsten Acht Bit einer 24-Bit Puffer, der nächste in der Mitte acht und der dritte in der am wenigsten bedeutsam Acht Bit. Wenn weniger als drei Bytes übrig sind, um zu codieren (oder insgesamt), sind die verbleibenden Pufferbits Null. Der Puffer wird dann verwendet, sechs Bits gleichzeitig, am wichtigsten, als Indizes in die Zeichenfolge: "Abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/", und das angegebene Zeichen wird ausgegeben.

Der Vorgang wird an den verbleibenden Daten wiederholt, bis weniger als vier Oktetten verbleiben. Wenn drei Oktetten bestehen, werden sie normal verarbeitet. Wenn weniger als drei Oktetten (24 Bit) verbleiben, werden die Eingabedaten mit Nullbits mit einem integralen Vielfachen von sechs Bits rechts gepasiert.

Nach der Codierung der nicht gepadnachten Daten, wenn zwei Oktetten des 24-Bit-Puffers gepolstert sind, sind zwei Zeros = Zeichen werden an die Ausgabe angehängt; Wenn ein Oktett des 24-Bit-Puffers mit gepolsterten Zögern gefüllt ist, einer, einer = Charakter ist angehängt. Dies signalisiert den Decoder, dass die durch Polsterung hinzugefügten Nullbits von den rekonstruierten Daten ausgeschlossen werden sollten. Dies garantiert auch, dass die codierte Ausgangslänge ein Vielfaches von 4 Bytes beträgt.

PEM verlangt, dass alle codierten Zeilen aus genau 64 druckbaren Zeichen bestehen, mit Ausnahme der letzten Zeile, die möglicherweise weniger druckbare Zeichen enthalten. Die Linien werden durch Whitespace-Zeichen gemäß lokalen (plattformspezifischen) Konventionen abgegrenzt.

MIME

Das MIME (Mehrzweck -Internet -Mail -Erweiterungen) Die Spezifikation listet Base64 als eine von zwei Listen auf Binär-bis-Text-Kodierung Pläne (das andere Wesen zitiert).[5] Mimes Base64 -Codierung basiert auf der der der der RFC 1421 Version von PEM: Es verwendet das gleiche 64-Charakter-Alphabet- und Codierungsmechanismus wie PEM und verwendet die = Symbol für die Ausgabepolsterung auf die gleiche Weise, wie bei beschrieben bei RFC 2045.

MIME gibt keine feste Länge für Base64-kodierte Linien an, gibt jedoch eine maximale Zeilenlänge von 76 Zeichen an. Zusätzlich gibt es das an, dass alle extraalphabetische Charaktere[klären] muss von einem konformen Decoder ignoriert werden, obwohl die meisten Implementierungen ein CR/LF verwenden Neue Zeile Paar, um codierte Linien abzugrenzen.

Somit beträgt die tatsächliche Länge der mime-konformen Basis64-kodierten Binärdaten normalerweise etwa 137% der ursprünglichen Datenlänge (43×7876), obwohl für sehr kurze Nachrichten der Overhead aufgrund des Overheads der Header viel höher sein kann. Sehr ungefähr beträgt die endgültige Größe von Base64-kodierten Binärdaten das 1,37-fache der ursprünglichen Datengröße + 814-Bytes (für Header). Die Größe der dekodierten Daten kann mit dieser Formel angenähert werden:

bytes = (string_length (coded_string) - 814) / 1.37

UTF-7

UTF-7, zuerst beschrieben in RFC 1642, was später von abgelöst wurde von RFC 2152, führte ein System namens ein modifiziertes Basis64. Dieses Datencodierungsschema wird zur Codierung verwendet UTF-16 wie ASCII Zeichen für die Verwendung in 7-Bit-Transporten wie z. SMTP. Es ist eine Variante der Base64 -Codierung, die in MIME verwendet wird.[8][9]

Das "modifizierte Basis64" -Alphabet besteht aus dem MIME Base64 -Alphabet, verwendet jedoch nicht das "="Polstercharakter. UTF-7 ist für die Verwendung in Mail-Headern vorgesehen (definiert in RFC 2047), und die "="Charakter ist in diesem Kontext als Fluchtcharakter für" zitierende "Codierung reserviert. Modifizierte Base64 lässt einfach die Polsterung aus und endet unmittelbar nach der letzten Basis64-Ziffer mit nützlichen Bits, die bis zu drei nicht verwendete Bits in der letzten Base64-Ziffer enthält.

OpenPGP

OpenPGP, beschrieben in RFC 4880, beschreibt Radix-64 Codierung, auch bekannt als "ASCII -Rüstung". Radix-64 ist identisch mit der von MIME beschriebenen" Base64 "-Kodierung mit Zugabe eines optionalen 24-Bit CRC. Das Überprüfung wird vor der Codierung in den Eingabedaten berechnet; Die Prüfsumme wird dann mit demselben Basis64 -Algorithmus codiert und, das von "vorangestellt wird"="Symbol als Trennzeichen, an die codierten Ausgabedaten angehängt.[10]

RFC 3548

RFC 3548, berechtigt Die Base16-, Base32- und Base64 -Datencodierungen, ist ein informatives (nicht normatives) Memo, das versucht, die zu vereinen RFC 1421 und RFC 2045 Spezifikationen von Base64-Codierungen, alternativen Alphabet-Codierungen und der Base32 (die selten verwendet wird) und Base16-Codierungen.

Es sei denn, Implementierungen werden in eine Spezifikation geschrieben, auf die sich bezieht RFC 3548 und erfordert insbesondere sonst, RFC 3548 verbietet es Implementierungen daran, Nachrichten zu generieren, die Zeichen außerhalb des Codierungsalphabets oder ohne Polsterung enthalten, und es erklärt auch, dass Decoderimplementierungen Daten ablehnen müssen, die Zeichen außerhalb des Codierungsalphabets enthalten.[6]

RFC 4648

Dieser RFC -Veraltungsveralt RFC 3548 und konzentriert sich auf Base64/32/16:

Dieses Dokument beschreibt die häufig verwendeten Codierungsschemata Base64, Base32 und Base16. Außerdem werden die Verwendung von Zeilenfutter in codierten Daten, die Verwendung von Polster in codierten Daten, die Verwendung von Nicht-Alphabet-Zeichen in codierten Daten, die Verwendung verschiedener codierender Alphabete und kanonische Codierungen erörtert.

URL -Anwendungen

Base64 -Codierung kann hilfreich sein, wenn in einer HTTP -Umgebung ziemlich lange identifizierende Informationen verwendet werden. Zum Beispiel eine Datenbank Persistenz -Framework für Java Objekte können Base64-Codierung verwenden, um eine relativ große eindeutige ID zu codieren (im Allgemeinen 128-Bit Uuids) in eine Zeichenfolge zur Verwendung als HTTP -Parameter in HTTP -Formularen oder HTTP -Get URLs. Außerdem müssen viele Anwendungen binäre Daten auf eine Weise codieren, die für die Einbeziehung in URLs, einschließlich in versteckten Webformfeldern, geeignet ist, und Base64 ist eine bequeme Kodierung, um sie auf kompakte Weise zu rendern.

Verwenden von Standard Base64 in URL erfordert eine Codierung von '+','/' und '='Charaktere in besonderer Bedeutung prozentualcodiert Hexadezimalsequenzen ('+' wird '%2b','/' wird '%2f' und '=' wird '%3d'), was die Zeichenfolge unnötig länger macht.

Deshalb, modifiziertes Basis64 für URL Es gibt Varianten (wie z. Base64url in RFC 4648), bei dem die '+' und '/"Zeichen von Standard Base64 werden jeweils durch" ersetzt "-' und '_', so dass du benutzst URL -Encoder/Decoder ist nicht mehr erforderlich und hat keinen Einfluss auf die Länge des codierten Werts, sodass die gleiche codierte Form für die Verwendung in relationalen Datenbanken, Webformen und Objektkennung im Allgemeinen intakt ist. Eine beliebte Site, um solche zu nutzen, ist Youtube.[11] Einige Varianten erlauben oder müssen die Polsterung weglassen. '=Anzeichen, um zu vermeiden, dass sie mit Feldabscheidern verwechselt werden oder dass eine solche Polsterung prozentualcodiert ist. Einige Bibliotheken[die?] wird codieren '=' zu '.', potenziell Anwendungen für relative Pfadangriffe aussetzen, wenn ein Ordnername aus Benutzerdaten codiert wird.

Html

Das A nach B() und btoa () JavaScript -Methoden, definiert in der HTML5 -Entwurfsspezifikation,[12] Geben Sie Webseiten Basis64 -Codierungs- und Dekodierungsfunktionen an. Das btoa () Die Methode gibt Padding -Zeichen aus, diese sind jedoch in der Eingabe der optional A nach B() Methode.

Andere Anwendungen

Beispiel eines SVG mit eingebetteten JPEG -Bildern, die in Base64 codiert sind[13]

Base64 kann in einer Vielzahl von Kontexten verwendet werden:

  • Base64 kann verwendet werden, um Text zu übertragen und zu speichern, die sonst möglicherweise verursachen könnten Grenzkollision
  • Base64 wird verwendet, um Zeichenketten in zu codieren LDAP -Datenwechselformat Dateien
  • Base64 wird häufig verwendet, um Binärdaten in einen einzubetten Xml Datei mit einer ähnlichen Syntax wie verwendet z.B. Favoriten in Feuerfuchsexportiert Lesezeichen.html.
  • Base64 wird verwendet, um Binärdateien wie Bilder in Skripten zu codieren, um abhängig von externen Dateien zu vermeiden.
  • Das Daten URI -Schema kann Base64 verwenden, um Dateiinhalte darzustellen. Zum Beispiel können Hintergrundbilder und Schriftarten in a angegeben werden CSS Stylesheet -Datei als Daten: URIS, anstatt in separate Dateien geliefert zu werden.
  • Obwohl nicht Teil der offiziellen Spezifikation für SVGEinige Zuschauer können Base64 interpretieren, wenn sie für eingebettete Elemente wie Bilder innerhalb von SVG verwendet werden.[14]

Anwendungen, die nicht mit RFC 4648 Base64 kompatibel sind

Einige Anwendungen verwenden ein Base64 -Alphabet, das sich erheblich von den Alphabeten unterscheidet, die in den häufigsten Base64 -Varianten verwendet werden (siehe Varianten Zusammenfassungstabelle Oben).

Ein Problem mit dem RFC 4648-Alphabet ist, dass die Reihenfolge der Elemente ändert, wenn eine sortierte Liste von Asciii-codierten Saiten Base64-transformiert und erneut sortiert ist. Dies liegt daran, dass das Polstercharakter und die Zeichen im Substitution -Alphabet nicht durch den ASCII -Zeichenwert geordnet sind (was durch die Verwendung der Sortierschaltflächen der folgenden Beispieltabelle angezeigt werden kann). Alphabete mögen (ungepasst) B64 ansprechen.

ASCII Basis64 Basis64, keine Polsterung B64
Licht w BGLNAHQGDW == BGLNAHQGDW P4zbo5eurk
Licht wo BGLNAHQGD28 = BGLNAHQGD28 P4zbo5eurqw
Licht wor BGLNAHQGD29Y BGLNAHQGD29Y P4zbo5eurqxm
  • Das Uuencodierung Alphabet enthält keine unteren Fallzeichen, stattdessen mit ASCII -Codes 32 (" "(Raum)) bis 95 ("_"), nacheinander. Uuencoding verwendet das Alphabet "! "#$%& '()*+,-./0123456789:;". Es war hilfreich, alle niedrigeren Buchstaben zu vermeiden, da viele ältere Drucker nur Großbuchstaben gedruckt wurden. Mit aufeinanderfolgenden ASCII -Zeichen speicherte Rechenleistung, da nur 32 hinzugefügt werden musste, ohne eine Nachschlagetabelle zu erfordern. Die Verwendung der meisten Interpunktionszeichen und des Raumschiffs kann seine Nützlichkeit in einigen Anwendungen einschränken, z. B. solche, die diese Zeichen als Syntax verwenden.
  • Binhex 4 (HQX), das innerhalb der verwendet wurde Klassischer Mac OS, schließt einige visuell verwirrbare Charaktere wie aus.7','O','g' und 'o'. Sein Alphabet enthält zusätzliche Interpunktionszeichen. Es verwendet das Alphabet "! "#$%& '()*+,-012345689@abcdefghijklmnpqrstuvxyz [` abcdefHijklmpqr".
  • Mehrere andere Anwendungen verwenden Alphabete, die den gemeinsamen Variationen ähneln, jedoch in einer anderen Reihenfolge:
    • UNIX speichert Passwort -Hashes mit berechnet mit Krypta in dem /etc/passwd Datei Verwenden einer Codierung genannt B64. Das Alphabet von Crypt setzt die Zeichensetzung aus . und / vor den alphanumerischen Charakteren. Crypt verwendet das Alphabet "./0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz". Polsterung wird nicht verwendet.
    • Das GEDCOM 5.5 Standard für genealogische Daten Interchange codiert Multimedia-Dateien im Text-Zeilen-hierarchischen Dateiformat. Gedcom verwendet das gleiche Alphabet wie Krypta, nämlich "./0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz".[15]
    • Bcrypt Hashes sind so konzipiert, dass sie genauso verwendet werden können wie mit traditioneller Krypta (3) Hashes, aber Bcrypts Alphabet ist in einer anderen Reihenfolge als die von Crypts. Bcrypt verwendet das Alphabet "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".[16]
    • Xxencodieren Verwendet ein meist-alphanumerischer Zeichen, das der Krypta ähnelt, aber verwendet + und - statt . und /. Xxencoding verwendet das Alphabet "+-0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz".
    • 6 PACK, verwendet mit einigen Anschlussknotencontrollerverwendet ein Alphabet von 0x00 bis 0x3f.[17]
    • Verprügeln Unterstützt numerische Literale in Base64. Bash verwendet das Alphabet "0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz@_".[18]

Siehe auch

Verweise

  1. ^ "Base64 Codierung und Dekodierung - Web -APIs". MDN Web Docs.
  2. ^ "Wann zu Basis64 -codieren Bilder (und wann nicht)" ". 28. August 2011.
  3. ^ a b Die Base16-, Base32- und Base64 -Datencodierungen. Ietf. Oktober 2006. doi:10.17487/rfc4648. RFC 4648. Abgerufen 18. März, 2010.
  4. ^ a b Datenschutzverbesserung für Internetelektronik Mail: Teil I: Verschlüsselungs- und Authentifizierungsverfahren zur Nachrichtenverschlüsselung und Authentifizierung. Ietf. Februar 1993. doi:10.17487/rfc1421. RFC 1421. Abgerufen 18. März, 2010.
  5. ^ a b Mehrzweck -Internet -Mail -Erweiterungen: (MIME) Teil eins: Format der Internet -Nachrichtenkörper. Ietf. November 1996. doi:10.17487/rfc2045. RFC 2045. Abgerufen 18. März, 2010.
  6. ^ a b Die Base16-, Base32- und Base64 -Datencodierungen. Ietf. Juli 2003. doi:10.17487/rfc3548. RFC 3548. Abgerufen 18. März, 2010.
  7. ^ Datenschutzverbesserung für die elektronische Post im Internet. Ietf. Februar 1987. doi:10.17487/rfc0989. RFC 989. Abgerufen 18. März, 2010.
  8. ^ UTF-7 Ein Mail-safe-Transformationsformat von Unicode. Ietf. Juli 1994. doi:10.17487/rfc1642. RFC 1642. Abgerufen 18. März, 2010.
  9. ^ UTF-7 Ein Mail-safe-Transformationsformat von Unicode. Ietf. Mai 1997. doi:10.17487/rfc2152. RFC 2152. Abgerufen 18. März, 2010.
  10. ^ OpenPGP -Nachrichtenformat. Ietf. November 2007. doi:10.17487/rfc4880. RFC 4880. Abgerufen 18. März, 2010.
  11. ^ "Hier ist, warum YouTube praktisch nie aus einzigartigen Video -IDs ausgeht.". www.mentalfloss.com. 23. März 2016. Abgerufen 27. Dezember 2021.
  12. ^ "7.3. Base64 Utility -Methoden". HTML 5.2 -Redakteurentwurf. World Wide Web Konsortium. Abgerufen 2. Januar 2018. Vorgestellt von Änderungset 5814, 2021-02-01.
  13. ^ ^ "Geige bearbeiten". jsfiddle.net.
  14. ^ "Die GEDCOM Standard Release 5.5". Homepages.rootsweb.ancestry.com. Abgerufen 2012-06-21.
  15. ^ Provos, Niels (1997-02-13). "src/lib/libc/crypt/bcrypt.c r1.1". Abgerufen 2018-05-18.
  16. ^ "6Pack A" Echtzeit "-PC zum TNC -Protokoll". Abgerufen 2013-05-19.
  17. ^ "Shell Arithmetic". Bash -Referenzhandbuch. Abgerufen 8. April 2020. Andernfalls nehmen Zahlen das Formular [Basis#] n an, wobei die optionale Basis eine Dezimalzahl zwischen 2 und 64 ist, die die arithmetische Basis darstellt, und n ist eine Zahl in dieser Basis.