Base64文字列をデコードする方法

Base64エンコードされた文字列を元のテキストにデコードする方法を解説。コード例、エラーハンドリングのコツ、デコード時によくある落とし穴を紹介します。

Decoding

詳細な説明

Base64デコードはエンコードの逆の操作です。Base64エンコードされた文字列を受け取り、元のバイト列に変換します。その後、テキスト、画像、その他のデータ形式として解釈できます。

デコードの手順:

  1. Base64文字列を取得します。例:"SGVsbG8="
  2. パディング文字(=)を除去し、その数を記録します(末尾で破棄するバイト数がわかります)。
  3. 各Base64文字をBase64アルファベットを使って6ビット値に逆マッピング:S=18, G=6, V=21, s=44, b=27, G=6, 8=60
  4. すべての6ビット値を連続したビットストリームに連結します。
  5. ビットストリームを8ビットのバイト単位で分割します。
  6. 各バイトを文字に変換:72=H, 101=e, 108=l, 108=l, 111=o

JavaScriptの場合:

const decoded = atob("SGVsbG8sIFdvcmxkIQ==");
// Result: "Hello, World!"

エラーハンドリングは非常に重要です。 Base64文字列にはBase64アルファベット(A-Z, a-z, 0-9, +, /、およびパディング用の =)の文字のみ含めることができます。無効な文字を含む文字列をデコーダーに渡すとエラーが発生します。デコード処理は必ずtry-catchブロックで囲みましょう:

try {
  const result = atob(input);
} catch (e) {
  console.error("Invalid Base64 input");
}

よくある落とし穴:

  • デコード結果が生のバイト列であり、必ずしも有効なテキストではないことを忘れがちです。元のデータが画像やバイナリファイルの場合、文字列として解釈するとゴミデータになります。
  • URL-safe Base64(-_)と標準Base64(+/)の混同。atob() は標準Base64を想定しており、URL-safeバリアントでは文字を置換しない限り失敗します。
  • 入力中の空白や改行が、厳密なパーサーではデコード失敗の原因になることがあります。ただし、多くの実装ではこれらを暗黙的に無視します。

ユースケース

APIレスポンスから受信したBase64エンコードされた設定ペイロードをデコードする場合。Kubernetes Secretsのように値がBase64文字列として格納されているケースが典型的です。

試してみる — Base64 Encoder

フルツールを開く