Ich weiß, was base64
Codierung ist und wie die base64
Codierung in C # berechnet wird. Ich habe jedoch mehrmals gesehen, dass beim Konvertieren eines Strings in base64 =
am Ende ein Code steht .
Ein paar Fragen kamen auf:
- Endet eine
base64
Zeichenfolge immer mit=
? - Warum wird
=
am Ende ein angehängt?
Antworten:
Es dient als Polsterung .
Eine vollständigere Antwort ist, dass eine Base64-codierte Zeichenfolge nicht immer mit a endet
=
, sondern nur mit einer oder zwei,=
wenn sie erforderlich sind, um die Zeichenfolge auf die richtige Länge aufzufüllen.quelle
=
würde ausreichen. Wenn Sie die Grenzen zurückfinden möchten, sollte immer ein Terminator vorhanden sein (und es wird immer noch nur ein Zeichen benötigt). Das gesamte Polsterungskonzept von Base64 ist nur ein Brainfart ...base64
effiziente Auffüllen mit Abbildungen und Beispielen erklärt. Der vorliegende Link zu Wikipedia ist wie @NH absolut irrelevant. erwähnt.1-Nr
2- Als kurze Antwort: Das 65. Zeichen ("=" Zeichen) wird nur als Ergänzung beim endgültigen Codierungsprozess einer Nachricht verwendet.
Sie haben kein '=' - Zeichen, wenn Ihre Zeichenfolge ein Vielfaches von 3 Zeichen hat, da die
Base64
Codierung jeweils drei Bytes (8 Bit) benötigt und diese im ASCII-Standard als vier druckbare Zeichen darstellt.Einzelheiten :
(a) Wenn Sie codieren möchten
ABCDEFG <=> [
ABC
] [DEF
] [G
Base64
behandelt (erzeugt 4 Zeichen) den ersten Block und den zweiten (da sie vollständig sind), aber für den dritten wird ein Doppel==
in der Ausgabe hinzugefügt , um die 4 benötigten Zeichen zu vervollständigen. Das Ergebnis ist also QUJD REVG Rw == (ohne Leerzeichen)(b) Wenn Sie codieren möchten ...
ABCDEFGH <=> [
ABC
] [DEF
] [GH
In ähnlicher Weise wird
=
am Ende der Ausgabe nur eine einzige hinzugefügt , um 4 Zeichen zu erhalten. Das Ergebnis ist QUJD REVG R0g = (ohne Leerzeichen).quelle
Aus Wikipedia :
Dies ist also eine Art Polsterung.
quelle
quelle
=
am Ende entfernt und dies für 1 Million Saiten getestet. Die Dekodierung stimmte immer überein.Es wird in RFC 2045 als spezielles Füllzeichen definiert, wenn am Ende der codierten Daten weniger als 24 Bit verfügbar sind.
quelle
Das Gleichheitszeichen (=) wird in bestimmten Formen der Base64-Codierung als Auffüllung verwendet. Der Wikipedia-Artikel auf base64 enthält alle Details.
quelle
Es ist Polsterung. Von http://en.wikipedia.org/wiki/Base64 :
quelle
decode(encode(A)+encode(B))=A+B
funktioniert mit Polsterung aber nicht ohne.http://www.hcidata.info/base64.htm
Codierung von "Mary had" in Base 64
In diesem Beispiel verwenden wir eine einfache Textzeichenfolge ("Mary had"), aber das Prinzip gilt unabhängig von den Daten (z. B. Grafikdatei). Um jeweils 24 Bit Eingabedaten in 32 Bit Ausgabe umzuwandeln, teilt die Base 64-Codierung die 24 Bit in 4 Blöcke zu 6 Bit auf. Das erste Problem, das wir bemerken, ist, dass "Mary had" kein Vielfaches von 3 Bytes ist - es ist 8 Bytes lang. Aus diesem Grund ist die letzte Gruppe von Bits nur 4 Bits lang. Um dies zu beheben, fügen wir zwei zusätzliche Bits von '0' hinzu und erinnern uns an diese Tatsache, indem wir am Ende ein '=' setzen. Wenn die in Base 64 zu konvertierende Textzeichenfolge 7 Byte lang gewesen wäre, hätte die letzte Gruppe 2 Bits gehabt. In diesem Fall hätten wir vier zusätzliche Bits von '0' hinzugefügt und uns an diese Tatsache erinnert, indem wir am Ende '==' gesetzt hätten.
quelle