Base64とは?仕組み・用途・URLセーフ変換とサイズが増える理由を解説
Base64は、画像やファイルといったバイナリデータを文字列として安全にやり取りするための変換方式です。本記事では「Base64とは何か」から、3バイトを4文字に変える仕組み、data URIやメール添付・APIトークンといった用途、URLセーフ変換、そしてサイズが約1.33倍になる理由と注意点までを、順を追ってやさしく解説します。
Web開発をしていると、画像をHTMLやCSSに直接埋め込んだり、APIのトークンを目にしたりする中で「Base64」という言葉によく出会います。なんとなく「文字列に変換するやつ」と理解している方も多いでしょう。本記事では、Base64の正体とその仕組み、実務での使いどころ、そして見落としがちな注意点までをまとめて解説します。
Base64とは何か
Base64とは、画像や音声、実行ファイルといったバイナリデータを、英数字と一部の記号だけからなるテキスト(文字列)に変換する方式です。名前の「64」は、変換に使う文字の種類が64個であることに由来します。具体的には、A〜Z(26文字)、a〜z(26文字)、0〜9(10文字)、そして記号の「+」と「/」の合計64文字を使います。さらに、データの長さを調整するための詰め物として「=」記号が使われます。
ここで大切なのは、Base64は暗号化ではないという点です。鍵を知らない人には読めなくする暗号とは異なり、Base64は誰でも元に戻せる単なる「変換ルール」です。中身を秘密にする効果はまったくないため、パスワードや個人情報を「Base64にしたから安全」と考えるのは誤りです。
では、なぜわざわざテキストに変換するのでしょうか。理由は、世の中の多くの仕組みが「テキストを前提に」作られているからです。メールやURL、JSONといった仕組みは、もともと文字を送るために設計されており、画像のような生のバイナリをそのまま流すと途中で壊れたり、特殊な制御文字が誤作動を起こしたりします。Base64を使えば、どんなデータも安全な文字の範囲に収まるため、テキストしか通れない経路でもバイナリを運べるようになります。Base64の変換を手元で試したいときは、Base64変換ツールで文字列を相互に変換して確認できます。
仕組み:3バイトを4文字に変換する
Base64の核心は、3バイトのデータを4文字に変換するという単純なルールにあります。順を追って見てみましょう。
- 元データを3バイト(=24ビット)ずつのまとまりに区切ります。
- その24ビットを、6ビットずつ4つのブロックに分け直します(6×4=24)。
- 6ビットで表せる数は0〜63の64通り。これを先ほどの64文字の表に当てはめ、1ブロックを1文字に置き換えます。
結果として、3バイト(8ビット×3)が4文字(6ビット×4)に変わります。コンピュータが扱う1バイトは8ビットですが、Base64はあえて6ビット単位で区切るのがポイントです。8と6の最小公倍数が24なので、3バイトずつがちょうどきれいに4文字へ収まるわけです。
端数の処理とパディング
元データが必ずしも3の倍数バイトとは限りません。たとえば1バイトや2バイトの端数が出たときは、足りないビットを0で埋めて変換し、文字数の帳尻を合わせるために末尾へ「=」を付けます。残りが1バイトなら「==」、2バイトなら「=」が末尾に付くのが目印です。Base64文字列の末尾に「=」を見かけたら、それはこのパディングだと理解できます。
例:「ABC」(3バイト)→「QUJD」(4文字、パディングなし)
このように、ルール自体はとてもシンプルです。変換は機械的な置き換えにすぎないため、元に戻す(デコードする)のも容易です。
主な用途:data URI・メール添付・APIトークン
Base64は地味な存在ですが、私たちが日常的に使うWebの裏側で大活躍しています。代表的な用途を3つ紹介します。
data URI(HTML/CSSへの画像埋め込み)
小さなアイコン画像などを、外部ファイルとして読み込む代わりにHTMLやCSSへ直接書き込む手法があります。これがdata URI(データURI)です。「data:image/png;base64,iVBORw0K...」のように、画像データをBase64文字列にしてソースコードへ埋め込みます。これにより画像取得のための通信回数を減らせるため、表示の高速化に役立ちます。画像をこの形式に変換したいときは、画像Base64変換ツールを使えば、ドラッグ&ドロップした画像をそのままdata URI文字列に変換できます。
メールの添付ファイル
電子メールの仕組み(MIME)は、もともとテキストを送るために作られています。そのため、画像やPDFなどの添付ファイルは、送信時に内部でBase64へ変換され、テキストとして本文に同梱されて運ばれます。受信側で元のファイルに戻されるため、私たちは意識せずに済んでいるだけで、添付の裏側ではBase64が動いています。任意のファイルをBase64化して中身を確認したいときは、ファイルBase64変換ツールが便利です。
APIトークンや認証情報
Web APIの世界でもBase64は頻出します。たとえばHTTPの基本認証(Basic認証)では「ユーザー名:パスワード」をBase64でエンコードしてヘッダーに載せます。また、JWT(JSON Web Token)はトークンの各部分がBase64(正確には後述のURLセーフ版)で表現されています。ただし前述のとおりBase64は暗号ではないため、これらはあくまで「文字として安全に運ぶ」ためであり、秘密性はHTTPSなど別の仕組みで担保されます。
URLセーフBase64とは
標準のBase64には「+」と「/」という記号が含まれます。ところが、この2文字はURLの中では特別な意味を持っています。「/」はパスの区切り、「+」は空白を表す記号として解釈されることがあり、そのままURLに含めると誤作動の原因になります。
そこで考案されたのがURLセーフBase64です。ルールは単純で、URLで問題になる2文字を別の文字に置き換えます。
| 標準Base64 | URLセーフBase64 |
|---|---|
| +(プラス) | -(ハイフン) |
| /(スラッシュ) | _(アンダースコア) |
| =(パディング) | 省略されることが多い |
この置き換えにより、URLのクエリパラメータやパスの一部、JWTのトークンなどに安全に埋め込めるようになります。中身のデータ自体は標準Base64と同じで、使う文字だけが違うと理解しておけば十分です。
サイズが約1.33倍になる理由
Base64の重要な性質として、変換後のデータ量が元より大きくなる点があります。おおよそ4/3倍(約1.33倍、+約33%)に増えます。理由は仕組みから明らかです。元の3バイト(24ビット分の情報)を、4文字(=4バイト、32ビット分の領域)で表現するため、3バイトが4バイトに膨らむからです。
3バイト → 4文字(4バイト):4 ÷ 3 ≒ 1.33倍
たとえば100KBの画像をBase64で埋め込むと、文字列としては約133KBになります。さらにパディングや改行が加わると、もう少し増えることもあります。data URIで画像を埋め込むと通信回数は減らせますが、HTMLやCSSのファイルサイズ自体は増えるという、トレードオフがあるわけです。小さな画像なら埋め込みが有利でも、大きな画像は通常どおり外部ファイルにしたほうがよい、という判断はこの性質から来ています。
使うときの注意点
最後に、Base64を扱うときに押さえておきたいポイントをまとめます。
- 暗号化ではない:誰でも簡単に元へ戻せます。機密情報の保護には、必ず暗号化やHTTPSなど別の手段を併用してください。
- サイズが増える:約1.33倍に膨らむため、大きなファイルの埋め込みには不向きです。用途に応じて使い分けましょう。
- 標準版とURLセーフ版を取り違えない:「+/」と「-_」が混在すると正しくデコードできません。送り先がどちらを期待しているか確認しましょう。
- 改行の有無に注意:メール用途などでは一定文字数ごとに改行が入る方式もあります。処理系によっては改行を取り除く必要があります。
- 機密データはブラウザ完結型で:個人情報を含むファイルを変換するなら、データを外部送信しないツールを選ぶと安心です。
Base64は、覚えることが少ないわりに、Webのあらゆる場所で静かに働いている基礎技術です。「バイナリをテキストに変える」「3バイトが4文字になる」「暗号ではない」という3点さえ押さえれば、data URIやAPIトークンの仕組みも自然と理解できます。まずは手元の文字列やファイルをBase64変換ツールで変換してみて、実際の動きを確かめてみてください。
よくある質問
Base64は暗号化ですか?安全に情報を隠せますか?
いいえ、Base64は暗号化ではありません。鍵を必要とせず、誰でも簡単に元のデータへ戻せる単なる変換方式です。中身を秘密にする効果はないため、パスワードや個人情報の保護には暗号化やHTTPSなど別の手段を使う必要があります。
なぜBase64でサイズが増えるのですか?
元の3バイト(24ビット)を4文字(4バイト相当)で表現するためです。3バイトが4バイトになるので、データ量はおおよそ4/3倍、約1.33倍(+約33%)に増えます。大きなファイルを埋め込む際はこの増加を考慮しましょう。
data URIとは何ですか?
data URIは、画像などのデータをBase64文字列にしてHTMLやCSSへ直接埋め込む書き方です。「data:image/png;base64,...」の形式で記述し、外部ファイルの読み込みが不要になるため、小さな画像では表示の高速化に役立ちます。
標準Base64とURLセーフBase64の違いは何ですか?
URLで特別な意味を持つ「+」と「/」を、それぞれ「-」と「_」に置き換えたものがURLセーフBase64です。パディングの「=」も省略されることが多く、URLのパラメータやJWTトークンなどに安全に埋め込めます。データの中身自体は同じです。
このサイトでBase64変換するとデータは送信されますか?
WAZA TOOLSのBase64変換・画像Base64変換・ファイルBase64変換の各ツールはすべてブラウザ内で処理され、入力した内容がサーバーに送信・保存されることはありません。個人情報を含むファイルでも安心してご利用いただけます。