Base64 ist eine der gebräuchlichsten Kodierungsmethoden für die Übertragung von 8-Bit-Byte-Code im Internet. Sie können RFC2045~RFC2049 überprüfen, das detaillierte Spezifikationen für MIME enthält. Base64 erfordert die Konvertierung aller drei 8-Bit-Bytes in vier 6-Bit-Bytes (3 * 8 = 4 * 6 = 24) und das anschließende Hinzufügen von zwei High-Bit-0s zum 6-Bit, um vier 8-Bit-Bytes zu bilden. Das heißt, die konvertierte Zeichenfolge wird theoretisch sein 1/3 länger als das Original
PHP-Funktionen: base64_encode() und base64_decode()
Base64-Codierungs- und Decodierungsprinzip
Base64-Codierung konvertiert tatsächlich 3 8-Bit-Bytes in 4 6-Bit-Bytes, (3*8 = 4*6 = 24) Diese 4 6-Bit-Bytes sind eigentlich immer noch 8 Bits, aber zwei höhere Bits sind auf 0 gesetzt. Wenn nur 6 Bits eines Bytes gültig sind, ist es Der Werteraum beträgt 0 bis 2 hoch 6 minus 1, was 63 entspricht, dh der Werteraum jeder Codierung der konvertierten Base64-Codierung beträgt (0 ~ 63).
Tatsächlich gibt es viele unsichtbare Zeichen in ASCII-Codes zwischen 0 und 63, daher sollte eine andere Zuordnung durchgeführt werden. Die Zuordnungstabelle ist
'A' ~ 'Z' ? ~ 25)
'a' ~ 'z' ? ' ? ASCII (62)
'/' ? ASCII (63)
Auf diese Weise können 3 8-Bit-Bytes in 4 sichtbare Zeichen umgewandelt werden.
Die spezifische Byte-Aufteilungsmethode ist: (Bild (die Zeichnung ist nicht gut, verstehe den Geist :-))
aaaaaabb ccccdddd eeffffff //abcdef ist eigentlich 1 oder 0, der Sache halber der Anzeige Wenn es klar ist, verwenden Sie stattdessen abcdef
~~~~~~~~ ~~~~~~~~ ~~~~~~~~
Byte 1 Byte 2 Byte 3
||. Beide Bits sind 0.
Bei dieser Aufteilung sollte die Anzahl der Bytes im Originaltext ein Vielfaches von 3 sein. Wenn diese Bedingung nicht erfüllt werden kann, verwenden Sie zum Ausgleich ausschließlich Null-Bytes
. Verwenden Sie stattdessen das =-Zeichen für die Base64-Kodierung. Aus diesem Grund enden einige Base64-Kodierungen mit einem oder zwei Gleichheitszeichen
, aber es gibt höchstens zwei Gleichheitszeichen, denn: wenn F(origin) das darstellt Anzahl der Bytes des Originaltextes, F(rest) stellt
dar, um den Rest darzustellen, dann wird
F(remain) = F(origin) MOD 3 erstellt.
Die möglichen Werte von F(rest) sind also 0,1,2
Wenn n = [F(ursprung) – F(rest)] / 3
Wenn F(remain) = 0, wird es in die Base64-Kodierung von 4*n Bytes konvertiert.
Wenn F(remain) = 1, da ein ursprüngliches Textbyte in zwei Base64-codierte Bytes aufgeteilt werden kann, um
die Base64-Codierung ein Vielfaches von 4 zu sein, so ist es sollte 2 Gleichheitszeichen hinzufügen.
Wenn F(remain) = 2 ist, sollte
ebenfalls mit einem Gleichheitszeichen gefüllt werden, da die beiden ursprünglichen Textbytes in drei Base64-codierte Bytes aufgeteilt werden können.
Am Ende der Base64-codierten Zeichenfolge stehen 0 bis 2 Gleichheitszeichen. Diese Gleichheitszeichen sind für die Dekodierung nicht erforderlich und können daher gelöscht werden.
In den Netzwerk-GET- und POST-Parameterlisten kann „+“ nicht normal übertragen werden, Sie können es durch „|“ ersetzen.
Auf diese Weise enthält die Base64-codierte Zeichenfolge nur „|“ , also Der auf diese Weise verarbeitete base64-kodierte String kann als Parameterwert in der Parameterliste
====================== übertragen werden ====== ========================================== ===
Das Folgende ist eine von einem Ausländer geschriebene Implementierung:
package com.meterware.httpunit
Weitere Artikel zu JAVA Implementierung von base64_encode und base64_decode, bitte achten Sie auf PHP Chinese Net!