関連するメモとして、ここに私があなたのために作成した任意のベース変換用のベースコンバータがあります。楽しい!
https://convert.zamicol.com/
パディングキャラクターとは
パディング文字は長さの要件を満たすのに役立ち、意味を持ちません。
パディングの10進数の例:
すべての文字列の長さが8文字であるという任意の要件がある場合、640は、「00000640」という意味を持たないため、先行する0をパディング文字として使用してこの要件を満たすことができます。
バイナリエンコーディング
バイトパラダイム:バイトは事実上の標準的な測定単位であり、エンコーディングスキームはバイトに関連付ける必要があります。
Base256はこのパラダイムに正確に適合します。1バイトは、base256の1文字に相当します。
16進数または16進数のBase16では、各文字に4ビットを使用します。1バイトは2つのbase16文字を表すことができます。
base256やbase16とは異なり、Base64はバイトパラダイムに均等に適合しません(base32にも適合しません)。すべてのbase64文字は、6ビットで表現でき、1バイトよりも2ビット短い。
base64エンコーディングとバイトパラダイムを分数として表現できます。1文字あたり6ビット、1バイトあたり8ビットです。この割合は、4文字で3バイトに削減されます。
この比率は、4つのbase64文字ごとに3バイトであり、base64をエンコードするときに従う規則です。 すべてのバイトがそれ自体で立つことができるbase16およびbase256とは異なり、Base64エンコードは3バイトバンドルでの測定でも約束することができます。
では、パディング文字がなくてもエンコーディングがうまく機能するにもかかわらず、パディングが推奨されるのはなぜですか?
ストリームの長さが不明な場合、またはデータストリームがいつ終了するかを正確に知ることが役立つ場合は、パディングを使用します。パディング文字は、それらの余分なスポットが空であり、あいまいさを排除する必要があることを明示的に伝えます。パディングで長さが不明な場合でも、データストリームの終了位置がわかります。
反例として、JOSEのような一部の標準ではパディング文字を許可していません。この場合、何かが欠けていると、暗号署名が機能しないか、他のbase64以外の文字( "。"など)が欠落します。長さについての仮定は行われませんが、何か問題がある場合は機能しないため、パディングは必要ありません。
そして、これはまさにbase64 RFCが言うことです、
状況によっては、ベースエンコードされたデータでパディング( "=")を使用する必要がないか、使用されません。一般的なケースでは、転送されたデータのサイズに関する仮定を行うことができない場合、正しいデコードされたデータを生成するためにパディングが必要です。
[...]
base 64のパディングステップ[...]が適切に実装されていない場合、エンコードされたデータの重要でない変更が発生します。たとえば、入力がbase 64エンコーディングの1オクテットのみの場合、最初のシンボルの6ビットすべてが使用されますが、次のシンボルの最初の2ビットのみが使用されます。これらのパッドビットは、以下のパディングに関する説明で説明されているように、準拠するエンコーダーによってゼロに設定する必要があります。このプロパティが保持されない場合、ベースエンコードされたデータの正規表現はなく、複数のベースエンコードされた文字列を同じバイナリデータにデコードできます。このプロパティ(およびこのドキュメントで説明されている他のプロパティ)が保持されている場合、正規のエンコーディングが保証されます。
パディングにより、失われたビットがないという約束でbase64エンコーディングをデコードできます。パディングなしでは、3バイトバンドルでの測定の明示的な確認応答はなくなります。パディングがないと、通常はTCP、チェックサム、またはその他の方法など、スタックの他の場所からの追加情報がないと、元のエンコーディングの正確な再生を保証できない場合があります。
例
RFC 4648の例を次に示します(http://tools.ietf.org/html/rfc4648#section-8)
「BASE64」関数内の各文字は1バイト(base256)を使用します。次に、それを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.)
これは、次のように操作できるエンコーダです。http://www.motobit.com/util/base64-decoder-encoder.asp