In diesem Zusammenhang finden Sie hier einen Basiskonverter für eine beliebige Basiskonvertierung, den ich für Sie erstellt habe. Genießen!
https://convert.zamicol.com/
Was sind Polsterzeichen?
Füllzeichen erfüllen die Längenanforderungen und haben keine Bedeutung.
Dezimalbeispiel für das Auffüllen:
Angesichts der willkürlichen Anforderung, dass alle Zeichenfolgen 8 Zeichen lang sind, kann die Zahl 640 diese Anforderung erfüllen, indem vorhergehende Nullen als Auffüllzeichen verwendet werden, da sie keine Bedeutung haben, "00000640".
Binäre Codierung
Das Byte-Paradigma: Das Byte ist die De-facto-Standardmaßeinheit, und jedes Codierungsschema muss sich auf Bytes beziehen.
Base256 passt genau in dieses Paradigma. Ein Byte entspricht einem Zeichen in base256.
Base16 , hexadezimal oder hexadezimal, verwendet 4 Bits für jedes Zeichen. Ein Byte kann zwei base16-Zeichen darstellen.
Base64 passt im Gegensatz zu base256 und base16 nicht gleichmäßig in das Byte-Paradigma (und base32 auch nicht). Alle base64-Zeichen können in 6 Bit dargestellt werden, 2 Bit vor einem vollständigen Byte.
Wir können die Base64-Codierung gegenüber dem Byte-Paradigma als Bruch darstellen: 6 Bits pro Zeichen über 8 Bits pro Byte . Dieser Bruchteil wurde um 3 Bytes über 4 Zeichen reduziert.
Dieses Verhältnis, 3 Bytes pro 4 Base64-Zeichen, ist die Regel, die wir beim Codieren von Base64 befolgen möchten. Die Base64-Codierung kann nur das Messen mit 3-Byte-Bündeln versprechen, im Gegensatz zu base16 und base256, bei denen jedes Byte für sich stehen kann.
Also , warum ist Polsterung ermutigt , obwohl Codierung sehr gut ohne die Füllzeichen funktionieren könnte?
Wenn die Länge eines Streams unbekannt ist oder wenn es hilfreich sein kann, genau zu wissen, wann ein Datenstrom endet, verwenden Sie Padding. Die Füllzeichen weisen ausdrücklich darauf hin, dass diese zusätzlichen Stellen leer sein sollten, und schließen Mehrdeutigkeiten aus. Selbst wenn die Länge beim Auffüllen unbekannt ist, wissen Sie, wo Ihr Datenstrom endet.
Als Gegenbeispiel erlauben einige Standards wie JOSE das Auffüllen von Zeichen nicht. In diesem Fall funktioniert eine kryptografische Signatur nicht, wenn etwas fehlt, oder es fehlen andere Nicht-Base64-Zeichen (wie das "."). Obwohl keine Annahmen über die Länge getroffen werden, ist keine Polsterung erforderlich, da etwas einfach nicht funktioniert, wenn etwas nicht stimmt.
Und genau das sagt der base64 RFC:
Unter bestimmten Umständen ist die Verwendung von Auffüllen ("=") in basenkodierten Daten nicht erforderlich oder wird nicht verwendet. Im allgemeinen Fall, wenn keine Annahmen über die Größe der transportierten Daten getroffen werden können, ist ein Auffüllen erforderlich, um korrekte decodierte Daten zu erhalten.
[...]
Der Auffüllschritt in Basis 64 [...] führt bei unsachgemäßer Implementierung zu nicht signifikanten Änderungen der codierten Daten. Wenn die Eingabe beispielsweise nur ein Oktett für eine Basis-64-Codierung ist, werden alle sechs Bits des ersten Symbols verwendet, aber nur die ersten zwei Bits des nächsten Symbols. Diese Pad-Bits MÜSSEN durch konforme Encoder auf Null gesetzt werden, was in den Beschreibungen zum Auffüllen unten beschrieben wird. Wenn diese Eigenschaft nicht gilt, gibt es keine kanonische Darstellung von basenkodierten Daten, und mehrere basenkodierte Zeichenfolgen können in dieselben Binärdaten decodiert werden. Wenn diese Eigenschaft (und andere in diesem Dokument beschriebene) gilt, ist eine kanonische Codierung garantiert.
Durch das Auffüllen können wir die Base64-Codierung mit dem Versprechen dekodieren, dass keine Bits verloren gehen. Ohne Auffüllen gibt es keine explizite Bestätigung mehr, dass in drei Byte-Bündeln gemessen wird. Ohne Auffüllen können Sie möglicherweise keine exakte Reproduktion der Originalcodierung ohne zusätzliche Informationen garantieren, die normalerweise von einer anderen Stelle in Ihrem Stapel stammen, z. B. TCP, Prüfsummen oder andere Methoden.
Beispiele
Hier ist das Beispielformular RFC 4648 ( http://tools.ietf.org/html/rfc4648#section-8 )
Jedes Zeichen in der Funktion "BASE64" verwendet ein Byte (base256). Wir übersetzen das dann in base64.
BASE64("") = "" (No bytes used. 0%3=0.)
BASE64("f") = "Zg==" (One byte used. 1%3=1.)
BASE64("fo") = "Zm8=" (Two bytes. 2%3=2.)
BASE64("foo") = "Zm9v" (Three bytes. 3%3=0.)
BASE64("foob") = "Zm9vYg==" (Four bytes. 4%3=1.)
BASE64("fooba") = "Zm9vYmE=" (Five bytes. 5%3=2.)
BASE64("foobar") = "Zm9vYmFy" (Six bytes. 6%3=0.)
Hier ist ein Encoder, mit dem Sie herumspielen können: http://www.motobit.com/util/base64-decoder-encoder.asp