解説 📅 2026-05-27 ⏱ 約6分

Base64エンコードとは?仕組み・使い方・セキュリティの基礎

#Base64 #エンコード #セキュリティ #初心者向け

Webアプリケーションを開発・運用していると、必ず一度は出会うのが Base64エンコードです。メールへの画像添付、APIでのトークン受け渡し、CSS内への画像埋め込みなど、活用シーンは多岐に渡ります。本記事では、Base64の仕組みと使い方、そして見落とされがちなセキュリティの注意点まで、実務目線で解説します。

Base64エンコードとは

Base64とは、バイナリデータ (画像・音声・暗号化データ等) を、英数字と記号のみのテキスト形式に変換する技術です。1995年にRFC 1521として規定され、現在は RFC 4648 で標準化されています。

変換に使われるのは以下の64文字 + パディング1文字、合計65種類の文字です。

  • 大文字アルファベット (A-Z): 26文字
  • 小文字アルファベット (a-z): 26文字
  • 数字 (0-9): 10文字
  • 記号 (+, /): 2文字
  • パディング (=): 1文字

「Base64」という名前は、この 64種類の文字を使う変換 (Base = 基数) という意味から来ています。

なぜBase64が必要なのか

「画像をそのままメールに添付すれば良いのでは?」と思うかもしれません。しかし、初期のメールプロトコル (SMTP) は 7ビットASCII文字 (英数字と一部記号) しか扱えない設計でした。バイナリデータ (8ビット) をそのまま送ると、サーバが文字化けや誤動作を起こす可能性があったのです。

そこで「バイナリを安全な文字だけに変換してから送る」必要が生まれ、Base64エンコードが標準として採用されました。現代でも以下のシーンで広く使われています。

実務での代表的な使用例

  • メール添付ファイル: MIME形式で画像・PDFを送るとき
  • HTML内画像埋め込み: <img src="data:image/png;base64,iVBORw...">
  • CSS内画像埋め込み: background: url(data:image/png;base64,...)
  • API通信: JWT (JSON Web Token)のペイロード、Basic認証のID:パスワード
  • OAuth: 認可コード・アクセストークンの伝送
  • QRコード: 一部のQRコード規格 (Base32 / Base45)

変換の仕組み

Base64は 「6ビットずつに区切って文字テーブルに対応させる」 という非常にシンプルな仕組みです。具体的に「ABC」(3文字 = 24ビット) を変換してみましょう。

  1. 「ABC」のASCIIコードは 65, 66, 67 (8ビットずつ・合計24ビット)
  2. 2進数: 01000001 01000010 01000011
  3. 6ビットずつ区切る: 010000 010100 001001 000011
  4. 各6ビットを10進数に: 16, 20, 9, 3
  5. 文字テーブル参照: Q, U, J, D
  6. 結果: 「QUJD」

このように、3バイト (24ビット) のデータが、4文字 (32ビット) に変換されます。つまり データサイズは約 4/3 (133%) に増加します。これがBase64の宿命的なオーバーヘッドです。

パディング (=) について

元データが3バイトの倍数で割り切れない場合、出力末尾に = を1〜2個追加して4の倍数に揃えます。

  • 元データが「A」(1バイト) → QQ==
  • 元データが「AB」(2バイト) → QUI=
  • 元データが「ABC」(3バイト) → QUJD (パディング不要)

Base64エンコード・デコードを試す

本サイトでは Base64エンコード/デコードツール を無料公開しています。ブラウザ内で完結処理するので、機密データを入力しても外部に送信されません。

  • テキスト ⇔ Base64の双方向変換
  • UTF-8 / Shift_JIS等の文字コード対応
  • URLセーフ版 (Base64URL) との変換
  • 画像ファイルのBase64エンコード

セキュリティ上の重要な注意点

⚠ Base64は「暗号化」ではありません
Base64は単なる「エンコーディング (変換)」であり、誰でも簡単に元のデータに戻せます。「Base64でエンコードしたから安全」というのは大きな誤解です。

以下のような誤用が頻繁に見られます。

悪い例: パスワードをBase64で保存

// ❌ これは「セキュリティ対策」になりません
$encoded = base64_encode($password);
$db->save($encoded);

Base64は1ミリ秒で復号できます。パスワードは必ず bcrypt / Argon2 / scrypt 等のハッシュ化を使用してください。

悪い例: 機密データをBase64でURL送信

// ❌ ログに残る・履歴に残る・全部見える
window.location = '/api?token=' + btoa(secret);

URLパラメータはサーバログ・ブラウザ履歴・Referer等に残ります。機密データはPOSTボディ + HTTPSで送信し、必要なら暗号化してから送るべきです。

悪い例: 設定ファイルにBase64でAPIキーを記述

# ❌ 「読みにくい」だけで、何の防御にもならない
api_key: c2VjcmV0LWFwaS1rZXk=

これは「目視で読みにくくなった」だけで、`base64 -d` コマンドで即復号されます。APIキーは環境変数 (`.env`) かKMS (Key Management Service) で管理しましょう。

正しい使い方

Base64は「機密データを隠す」用途には絶対に使ってはいけません。正しい用途は以下のような場合です。

  • バイナリを安全に転送する経路を作る (メール添付・URL埋め込み)
  • JSON / XML / YAMLにバイナリを含める (フォーマットの制約回避)
  • ハッシュ値や公開鍵を人間にも読める形式で出力
  • JWTのペイロード (内容は公開前提、署名で改竄検知)

まとめ

  • Base64はバイナリ → テキスト変換の技術 (暗号化ではない)
  • データサイズは約 4/3 倍に膨らむ
  • メール添付・data URI・JWT等で広く利用される
  • 誰でも復号できるので、機密データ保護には不向き
  • パスワードはbcrypt等のハッシュ化を使用する

本サイトの Base64エンコード/デコードツール はブラウザ内処理で完結するため、安全にご利用いただけます。データは外部送信されません。

💡 関連ツールも合わせてどうぞ
URLエンコードやHTMLエンティティ変換も実務でよく使います。本サイトのエンコード・変換カテゴリには11種類の変換ツールが揃っています。
← ブログ一覧に戻る