487 Stimmen

Warum hat eine base64-kodierte Zeichenkette ein =-Zeichen am Ende?

Ich weiß, was base64 Kodierung ist und wie man sie berechnet base64 Kodierung in C#, aber ich habe mehrmals gesehen, dass bei der Konvertierung eines Strings in base64 ein = am Ende.

Es kamen einige Fragen auf:

  1. Ist ein base64 String endet immer mit = ?
  2. Warum ist ein = am Ende angehängt werden?

13voto

Sam Holloway Punkte 1989

Das Gleichheitszeichen (=) wird in bestimmten Formen der base64-Kodierung als Auffüllzeichen verwendet. Die Wikipedia-Artikel auf base64 enthält alle Einzelheiten.

10voto

Thomas Leonard Punkte 6888

Es ist gepolstert. Von http://en.wikipedia.org/wiki/Base64 :

Theoretisch wird das Auffüllzeichen für die Dekodierung nicht benötigt, da die Anzahl der fehlenden Bytes aus der Anzahl der Base64 Bytes berechnet werden kann. Ziffern berechnet werden kann. In einigen Implementierungen ist das Auffüllzeichen obligatorisch, während es bei anderen nicht verwendet wird. Ein Fall, in dem Auffüllzeichen erforderlich sind, ist die Verkettung mehrerer Base64-kodierter Dateien.

8voto

Dev Punkte 151

http://www.hcidata.info/base64.htm

Kodierung von "Mary had" in Base 64

In diesem Beispiel verwenden wir eine einfache Textzeichenfolge ("Mary had"), aber das Prinzip gilt unabhängig von der Art der Daten (z. B. einer Grafikdatei). Um die 24 Bits der Eingabedaten in 32 Bits der Ausgabedaten umzuwandeln, werden die 24 Bits bei der Base-64-Kodierung in 4 Teile zu je 6 Bits aufgeteilt. Das erste Problem, das uns auffällt, ist, dass "Mary had" kein Vielfaches von 3 Bytes ist - sie ist 8 Bytes lang. Aus diesem Grund ist die letzte Bitgruppe nur 4 Bits lang. Um dieses Problem zu beheben, fügen wir zwei zusätzliche Bits mit "0" hinzu und erinnern uns an diese Tatsache, indem wir ein "=" an das Ende setzen. Wäre der in Base 64 zu konvertierende Textstring 7 Bytes lang gewesen, hätte die letzte Gruppe 2 Bits gehabt. In diesem Fall hätten wir vier zusätzliche Bits von '0' hinzugefügt und dies durch ein '==' am Ende vermerkt.

5voto

Vladimir Ignatyev Punkte 1904

= ist ein Auffüllungszeichen. Wenn der Eingabestrom eine Länge hat, die nicht ein Vielfaches von 3 ist, wird das Auffüllzeichen hinzugefügt. Dies ist für den Decoder erforderlich: Ohne Auffüllzeichen würde das letzte Byte eine falsche Anzahl von Nullbits aufweisen.

Eine bessere und ausführlichere Erklärung finden Sie hier: https://base64tool.com/detect-whether-provided-string-is-base64-or-not/

3voto

glades Punkte 1170

Die Gleichheitszeichen oder doppelten Gleichheitszeichen dienen als Füllung. Es ist ein dummes Konzept, das in RFC2045 und sie ist eigentlich überflüssig. Jeder Decend-Parser kann einen Base64-String kodieren und dekodieren, ohne von Padding zu wissen, indem er einfach die Anzahl der Zeichen zählt und den Rest auffüllt, wenn die Größe nicht durch 3 bzw. 4 teilbar ist. Das führt hin und wieder zu Schwierigkeiten, weil einige Parser Padding erwarten, während andere es schlichtweg ignorieren. Mein MPU base64 Decoder zum Beispiel benötigt Padding, aber er empfängt einen nicht gepaddeten base64 String über das Netzwerk. Das führt zu fehlerhaftem Parsing und ich musste es selbst berücksichtigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X