1. ホーム
  2. encoding

[解決済み] base64でエンコードされた文字列の最後に=記号があるのはなぜですか?

2022-03-23 01:01:16

質問

私は知っている base64 エンコーディングとは何か、どのように計算するのか base64 のエンコーディングは、C#の場合、文字列をbase64に変換する際に = を末尾につけています。

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

  1. を使用するのでしょうか? base64 の文字列は常に = ?
  2. なぜ = は最後に追加されるのですか?

解決方法は?

Q base64の文字列は必ず=で終わるのですか?

A: いいえ。(usbという単語はdXNiにbase64エンコードされています。)

Q なぜ最後に「=」が付くのですか?

A: 簡潔な答えとして。 最後の文字("="記号)は、メッセージを特殊な文字数で符号化する際の最終工程で、補完(パディング)としてのみ追加されるものです。

文字列が3文字の倍数である場合、'='記号は付きません。 Base64 エンコーディングは、それぞれの スリー バイト(1文字=1バイト)で表現します。 フォー ASCII規格の印字可能な文字。

:

(a) をエンコードする場合

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

Base64 は、最初のブロック(4文字を生成)と2番目のブロック(完全であるため)を処理します。しかし、3つ目のブロックでは、2重の == が出力され、必要な4文字が完成します。したがって、結果は次のようになります。 QUJD REVG Rw== (スペースなし)です。

[ ABC ] => QUJD

[ DEF ] => REVG

[ G ] => Rw==

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

を追加し、同様に = を出力することで、4文字になります。

結果は次のようになります。 QUJD REVG R0g= (スペースなし)です。

[ ABC ] => QUJD

[ DEF ] => REVG

[ GH ] => R0g=