Decodex

DECODEX · BASE64 · UTF-8

Base64末尾の=と==とは:パディングとエラーの原因

f・fo・fooでBase64パディングを説明。省略された=の復元、不正な長さ、部分的なパディングを確認できます。

末尾の=は元の文字ではなくパディングです。Base64は3バイトを4文字で表します。最後に1バイト残る場合は==、2バイトの場合は=でパディング付きの形式を完成させます。

文字数ではなくバイト数を数える

データ文字1つは6ビットを表し、3バイトは24ビットなので4文字に収まります。日本語や絵文字はUTF-8で複数バイトになることがあります。😀は4バイトで8J+YgA==になります。表では1・2・3バイトの入力を比較できます。

省略されたパディングの復元

省略が認められる形式では空白を除き、長さを4で割った余りを調べます。余り2なら==、3なら=を追加し、0なら追加不要です。余り1は不正または切れたデータを示し、=を足しても直せません。APIが求める形式を確認してください。

Zgは成功し、Zg=は失敗する理由

Decodexは完全に省略されたZgのパディングを復元し、fを返します。Zg==も有効です。Zg=は一部だけパディングがあり、全体の長さが不正なため拒否されます。A=AAやZg===も失敗します。コピーの誤りを隠すように=を繰り返し追加・削除しないでください。

この例を変換する

テキストUTF-8 bytesBase64パディング
f1Zg====
fo2Zm8==
foo3Zm9v—

この例を変換する →

Base64 → UTF-8 · UTF-8 → Base64

よくある質問

すべてのBase64は=で終わりますか?

いいえ。バイト数が3の倍数ならパディングは不要です。プロトコルによっては明示的に省略します。

参考資料

Base64の関連ガイド