Base64 とは?初心者のための完全ガイド
Base64 エンコーディングとは何ですか?
Base64 は、64 文字のアルファベットを使用してバイナリデータを ASCII 文字列形式で表現するバイナリ-to-テキストのエンコード方式です。もともとは MIME(Multipurpose Internet Mail Extensions)によるメール添付用に設計され、Web 上で最も広く使用されているエンコード方法の 1 つであり続けています。
テキスト用に構築されたチャネルでバイナリデータ — 画像、ファイル、圧縮バイトなど — を送信する必要がある場合、Base64 は頼りになるソリューションです。任意のバイトを取得し、安全で移植可能な文字、数字、およびいくつかの特別な文字の文字列に変換します。
Base64 はどのように機能しますか?
Base64 は、バイナリデータを 3 バイト(24 ビット)のグループで処理し、各グループを 4 つの Base64 文字に変換することで機能します。「Base64」という名前は、エンコーディングアルファベットが 64 の異なる文字(A-Z、a-z、0-9、+、/)を使用することに由来します。
エンコーディングアルゴリズムのステップバイステップ
- 3 バイト(24 ビット)の入力データを取る
- それらを 4 つの 6 ビットグループに分割する
- 各 6 ビット値(0-63)を Base64 アルファベットテーブルにマッピングする
- 入力の長さが 3 で割り切れない場合は、パディング(
=)を追加する
具体的な例を示します。文字列 "Man" は次のようにエンコードされます:
M(ASCII 77)=01001101a(ASCII 97)=01100001n(ASCII 110)=01101110
結合: 01001101 01100001 01101110 → 6 ビットグループに分割:
010011= 19 →T010110= 22 →W000101= 5 →F101110= 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 エンコーダとデコーダを使用して、ブラウザでテキストやファイルを即座に変換しましょう。インストールやサインアップは不要です。