🔐
← ガイド一覧に戻る

Base64 とは?初心者のための完全ガイド

· タグ: base64, encoding, binary-to-text, web-development, data-transfer

Base64 エンコーディングとは何ですか?

Base64 は、64 文字のアルファベットを使用してバイナリデータを ASCII 文字列形式で表現するバイナリ-to-テキストのエンコード方式です。もともとは MIME(Multipurpose Internet Mail Extensions)によるメール添付用に設計され、Web 上で最も広く使用されているエンコード方法の 1 つであり続けています。

テキスト用に構築されたチャネルでバイナリデータ — 画像、ファイル、圧縮バイトなど — を送信する必要がある場合、Base64 は頼りになるソリューションです。任意のバイトを取得し、安全で移植可能な文字、数字、およびいくつかの特別な文字の文字列に変換します。

Base64 はどのように機能しますか?

Base64 は、バイナリデータを 3 バイト(24 ビット)のグループで処理し、各グループを 4 つの Base64 文字に変換することで機能します。「Base64」という名前は、エンコーディングアルファベットが 64 の異なる文字(A-Za-z0-9+/)を使用することに由来します。

エンコーディングアルゴリズムのステップバイステップ

  1. 3 バイト(24 ビット)の入力データを取る
  2. それらを 4 つの 6 ビットグループに分割する
  3. 各 6 ビット値(0-63)を Base64 アルファベットテーブルにマッピングする
  4. 入力の長さが 3 で割り切れない場合は、パディング=)を追加する

具体的な例を示します。文字列 "Man" は次のようにエンコードされます:

  • M(ASCII 77)= 01001101
  • a(ASCII 97)= 01100001
  • n(ASCII 110)= 01101110

結合: 01001101 01100001 01101110 → 6 ビットグループに分割:

  • 010011 = 19 → T
  • 010110 = 22 → W
  • 000101 = 5 → F
  • 101110 = 46 → u

したがって、"Man""TWFu" になります。

パディングについてはどうですか?

入力の長さが 3 バイトの倍数でない場合、Base64 は出力が 4 文字の倍数になるようにパディング文字(=)を追加します:

  • 1 バイトの入力 → 2 つの Base64 文字 + 2 つのパディング文字(==
  • 2 バイトの入力 → 3 つの Base64 文字 + 1 つのパディング文字(=

たとえば、"M" に対応する単一のバイトは TQ== にエンコードされます。

Base64 アルファベットテーブル

| 値 | 文字 | 値 | 文字 | 値 | 文字 | 値 | 文字 | |-------|------|-------|------|-------|------|-------|------| | 0 | A | 16 | Q | 32 | g | 48 | w | | 1 | B | 17 | R | 33 | h | 49 | x | | 2 | C | 18 | S | 34 | i | 50 | y | | 3 | D | 19 | T | 35 | j | 51 | z | | 4 | E | 20 | U | 36 | k | 52 | 0 | | 5 | F | 21 | V | 37 | l | 53 | 1 | | 6 | G | 22 | W | 38 | m | 54 | 2 | | 7 | H | 23 | X | 39 | n | 55 | 3 | | 8 | I | 24 | Y | 40 | o | 56 | 4 | | 9 | J | 25 | Z | 41 | p | 57 | 5 | | 10 | K | 26 | a | 42 | q | 58 | 6 | | 11 | L | 27 | b | 43 | r | 59 | 7 | | 12 | M | 28 | c | 44 | s | 60 | 8 | | 13 | N | 29 | d | 45 | t | 61 | 9 | | 14 | O | 30 | e | 46 | u | 62 | + | | 15 | P | 31 | f | 47 | v | 63 | / |

Base64 エンコーディングの一般的なユースケース

メール添付(MIME)

Base64 は MIME(Multipurpose Internet Mail Extensions)用に作成されました。SMTP のようなメールプロトコルは 7 ビット ASCII テキスト用に設計されたため、PDF、画像、ZIP ファイルなどのバイナリ添付ファイルは、メールで送信する前に Base64 としてエンコードする必要があります。

HTML と CSS のデータ URL

Base64 を使用すると、データ URL を使って画像、フォント、その他のメディアを HTML や CSS ファイルに直接埋め込むことができます:

<img src="data:image/png;base64,iVBORw0KGgo..." alt="Embedded Image" />

これにより余分な HTTP リクエストが排除され、小さなアセットに有益です。

JSON Web Token(JWT)

JWT は Base64 の URL セーフな変種(Base64url)を使用して、各トークンのヘッダー、ペイロード、シグネチャをエンコードします。これが、認証システムで eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 のような文字列を見る理由です。

データベースへのバイナリ保存

多くのデータベースはテキストストレージ用に最適化されており、生のバイトを適切に処理できない場合があります。バイナリデータを Base64 としてエンコードすると、画像、シリアライズされたオブジェクト、または暗号化されたデータをテキストカラムに保存できます。

API ペイロード

REST または GraphQL API を通じてバイナリデータを送信する場合 — 特に JSON 形式で — Base64 は標準的な選択肢です。JSON は生のバイトをネイティブに表現できないためです。

Base64 はファイルサイズを増やしますか?

はい。Base64 エンコーディングはデータサイズを約 33% 増加させます。入力の 3 バイトごとに、4 バイトの出力が得られます。このオーバーヘッドは、テキストのみのチャネルでバイナリデータを転送可能にするためのトレードオフです。

Base64 は暗号化ですか?

いいえ。これは一般的な誤解です。Base64 はエンコード方式であり、暗号化ではありません。Base64 文字列を受け取った人は誰でも、鍵を必要とせずに元のデータにデコードできます。Base64 はセキュリティや機密性を一切提供しません。データを保護する必要がある場合は、暗号化(AES など)を使用し、その後に転送のために暗号化されたバイトを Base64 でエンコードすることもできます。

Base64 と他のバイナリ-to-テキストエンコーディングの比較

| エンコーディング | アルファベットサイズ | オーバーヘッド | 最適な用途 | |----------|--------------|----------|--------------| | Base64 | 64 chars | ~33% | データ転送と埋め込み | | Base32 | 32 chars | ~60% | 人間が読みやすく、大文字小文字を区別しないコンテキスト | | Base16 (Hex) | 16 chars | 100% | デバッグ、メモリダンプ、カラーコード | | Ascii85 | 85 chars | ~25% | Adobe PostScript、PDF ストリーム |

Base64 は、スペース効率と幅広い互換性の間のバランスの取れたトレードオフを提供し、Web 上で最も人気のあるバイナリ-to-テキストエンコーディングとなっています。

Base64 エンコーディングをオンラインで試す

自分のデータをエンコードする準備はできましたか?無料のオンライン Base64 エンコーダとデコーダを使用して、ブラウザでテキストやファイルを即座に変換しましょう。インストールやサインアップは不要です。