ここでは、問題の256 ビットと512 ビットの数値が、それぞれ正確に 32 バイトまたは 64 バイトを使用してエンコードされていると想定しています (つまり、先行ゼロの削除、符号付き/符号なしの問題を防ぐための追加ビットなし、ASN.1 BER エンコード ヘッダーなし) 、...)。
Base64 では、バイト トリプルごとに 4 文字を使用し、各文字は 6 ビットのデータを表します。
byte #1 | byte #2 | byte #3
bit 7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0
になる
bit 5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0
char #1 | char #2 | char #3 | char #4
ウィキペディアの記事などを参照して、どの char が使用され、どのビットの 6 タペルがテーブルによって指定されるかを指定します。
したがって、256 ビットの数値の場合、 32 バイトをエンコードする必要があります。つまり、11 文字の 4 倍が使用され、最後の 4 桁は最大の 3 バイトではなく 2 バイトのみをエンコードします。つまり、16 ビットのデータのみです。したがって、最後の文字 (データがない) は であり、=
最後から 2 番目の文字 (上位 4 ビットのデータしかない) は、ビットの 6 タペルを表す 1 つだけであり、下位 2 ビット0、つまり列挙した文字です。
512 ビットの数値の場合、64 バイトをエンコードする必要があります。つまり、22 文字の 4 倍が使用されます。最後の 4 桁は、最大の 3 バイトではなく 1 のみをエンコードします。つまり、8 ビットのデータのみです。したがって、最後の 2 文字 (データがない) は両方=
であり、2 番目の文字 (上位 2 ビットのデータしかない) は、ビットの 6 タペルを表す 1 つだけであり、最下位 4 ビットは0、つまり文字AQgw
.
ただし、前述のように、数値のエンコードについて特定の仮定を行いました...