なぜbase64でエンコードされた文字列の最後に=記号が付くのか質問する

なぜbase64でエンコードされた文字列の最後に=記号が付くのか質問する

base64エンコーディングとは何か、C# でエンコーディングを計算する方法は知っていますが、文字列を base64 に変換すると最後にbase64が付くことが何度かありました。=

いくつかの質問が出てきました:

  1. base64文字列は常に で終わりますか=?
  2. なぜ=最後に が追加されるのですか?

ベストアンサー1

Q base64 文字列は常に で終わりますか=?

A: いいえ。(単語はusbbase64でエンコードされますdXNi)

Q なぜ=最後に が追加されるのですか?

A: 簡単に答えると、
最後の文字 (記号) は、特別な数の文字=でメッセージをエンコードする最終プロセスで、補数 (パディング) としてのみ追加されます。

=文字列に 3 文字の倍数がある場合は符号は付きません。これは、Base64エンコードでは3バイト (1 文字 = 1 バイト) がそれぞれ取得され、 ASCII 標準の4 つの印刷可能な文字として表されるためです。

(a)エンコードしたい場合

ABCDEFG <=> [ ABC] [ DEF] [ G]

Base64最初のブロック (4 文字を生成) と 2 番目のブロック (完了) を処理します。ただし、3 番目のブロックについては、==必要な 4 文字を完了するために、出力に double が追加されます。したがって、結果はQUJD REVG Rw== (スペースなし) になります。

[ ABC] =>QUJD

[ DEF] =>REVG

[ G] =>Rw==

(b) ABCDEFGH <=> [ ABC] [ DEF] [ GH]をエンコードする場合

=同様に、出力の最後に1 を追加して4 文字を取得します。

結果はQUJD REVG R0g= (スペースなし) になります。

[ ABC] =>QUJD

[ DEF] =>REVG

[ GH] =>R0g=

おすすめ記事