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?

707voto

Badr Bellaj Punkte 8859

Q Endet eine base64-Zeichenkette immer mit = ?

A: Nein. (das Wort usb ist base64-kodiert in dXNi )

F Warum ist ein = am Ende angehängt werden?

A: Als kurze Antwort:
Das letzte Zeichen ( = Zeichen) wird nur als Ergänzung (Padding) im abschließenden Prozess der Kodierung einer Nachricht mit einem Spezial Anzahl der Zeichen.

Sie haben keine = Zeichen, wenn Ihre Zeichenkette ein Vielfaches von 3 Zeichen hat, denn Base64 Kodierung nimmt jede drei Bytes (ein Zeichen=1 Byte) und stellt sie als vier druckbare Zeichen im ASCII-Standard.

Beispiel :

(a) Wenn Sie Folgendes kodieren möchten

ABCDEFG <=> [ ABC ] [ DEF ] [ G ]

Base64 befasst sich mit dem ersten Block (der 4 Zeichen erzeugt) und dem zweiten (da sie vollständig sind). Für den dritten Block wird jedoch ein doppeltes == in der Ausgabe, um die 4 benötigten Zeichen zu vervollständigen. Das Ergebnis wird also sein QUJD REVG Rw== (ohne Leerzeichen).

[ ABC ] => QUJD

[ DEF ] => REVG

[ G ] => Rw==

(b) Wenn Sie Folgendes kodieren möchten ABCDEFGH <=> [ ABC ] [ DEF ] [ GH ]

In ähnlicher Weise wird sie eine = am Ende der Ausgabe, um 4 Zeichen zu erhalten.

Das Ergebnis wird sein QUJD REVG R0g= (ohne Leerzeichen).

[ ABC ] => QUJD

[ DEF ] => REVG

[ GH ] => R0g=

330voto

Andrew Hare Punkte 332190

Sie dient als Polsterung .

Eine vollständigere Antwort ist, dass eine base64-kodierte Zeichenfolge nicht immer enden mit einer = wird es nur mit einem oder zwei = wenn sie erforderlich sind, um die Zeichenfolge auf die richtige Länge zu bringen.

78voto

Legolas Punkte 1412

En Wikipedia :

Die abschließende '=='-Sequenz zeigt an, dass die letzte Gruppe nur ein Byte enthielt, und '=' bedeutet, dass sie zwei Bytes enthielt.

Es handelt sich also um eine Art Polsterung.

19voto

iandotkelly Punkte 8864

Sie ist definiert in RFC 2045 als spezielles Auffüllzeichen, wenn am Ende der kodierten Daten weniger als 24 Bit zur Verfügung stehen.

18voto

Ian Kemp Punkte 26318
  1. Nein.
  2. Auffüllen der Base64-kodierten Zeichenfolge auf ein Vielfaches von 4 Zeichen, damit sie korrekt dekodiert werden kann.

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