Base64エンコードとは?仕組み・用途・変換方法をわかりやすく解説
最終更新: 2026年3月29日 ・ 読了時間: 約5分
Base64は、バイナリデータをテキスト文字列に変換するエンコーディング方式です。 メールの添付ファイル、Data URI、JWTトークン、API認証ヘッダーなど、 現代のWeb開発やシステム連携で幅広く使われています。 この記事ではBase64の仕組みから実際の変換方法まで、わかりやすく解説します。
Base64とは — バイナリ→テキスト変換の仕組み
コンピュータが扱うデータには、テキスト(文字列)とバイナリ(画像・音声・実行ファイルなど)の2種類があります。 メールやHTMLなど、テキストしか扱えないプロトコルやフォーマットでバイナリデータを送りたい場合、 バイナリをテキストに変換する必要があります。この変換を行うのがBase64です。
Base64は、A-Z(26文字)、a-z(26文字)、0-9(10文字)、+、/の合計64種類の文字と、 パディング用の「=」を使ってデータを表現します。 ASCII文字だけで構成されるため、テキストベースのあらゆるシステムで安全に転送できます。
なぜBase64が必要か — メール添付・Data URI・JWT・API認証
Base64が使われる主なシーンは以下の通りです。
- メール添付(MIME) — SMTPプロトコルは7bitのASCIIテキストを前提としているため、 画像やPDFなどのバイナリファイルはBase64に変換して送信されます。
- Data URI — 小さな画像やフォントをHTMLやCSSに直接埋め込む場合に、
data:image/png;base64,iVBOR...のような形式で使います。 - JWT(JSON Web Token) — ヘッダーとペイロードがBase64URLでエンコードされています。 ドット(.)で区切られた3つのBase64URL文字列で構成されます。
- Basic認証 — HTTPのBasic認証では、 ユーザー名とパスワードを「user:password」の形式でBase64エンコードし、Authorizationヘッダーに設定します。
エンコードの仕組み — 3バイト→4文字への変換プロセス
Base64エンコードは、入力データを3バイト(24ビット)ずつ区切り、 それを6ビットずつ4つのグループに分割して変換します。
| ステップ | 処理内容 | 例("ABC") |
|---|---|---|
| 1. ASCII値に変換 | 各文字をバイト値にする | 65, 66, 67 |
| 2. 2進数に変換 | 8ビットずつ連結(24ビット) | 01000001 01000010 01000011 |
| 3. 6ビットに分割 | 24ビットを4グループに分割 | 010000 010100 001001 000011 |
| 4. Base64文字に変換 | 各6ビット値を変換テーブルで文字に | Q, U, J, D → "QUJD" |
入力が3バイトの倍数でない場合は、足りない分を0で埋め、出力には「=」(パディング)が追加されます。 1バイト余りなら「==」、2バイト余りなら「=」が末尾に付きます。
URLセーフBase64との違い — + / = の代替文字
標準のBase64で使われる「+」「/」「=」は、URLやファイル名で特別な意味を持つため、 そのまま使うと問題が生じることがあります。 URLセーフBase64(Base64URL)では、以下のように文字を置き換えます。
| 標準Base64 | Base64URL | 理由 |
|---|---|---|
| + | - | URLで「+」はスペースに変換される |
| / | _ | URLで「/」はパス区切りになる |
| = | (省略) | URLで「=」はクエリパラメータに使われる |
プログラミング言語別の変換方法
JavaScript(ブラウザ)
// エンコード(ASCII文字列のみ)
const encoded = btoa('Hello, World!');
// → "SGVsbG8sIFdvcmxkIQ=="
// デコード
const decoded = atob(encoded);
// → "Hello, World!"
// 日本語を含む場合(UTF-8対応)
const utf8Encode = btoa(
new TextEncoder().encode('こんにちは')
.reduce((s, b) => s + String.fromCharCode(b), '')
);Python
import base64
# エンコード
encoded = base64.b64encode(b'Hello, World!')
# → b'SGVsbG8sIFdvcmxkIQ=='
# デコード
decoded = base64.b64decode(encoded)
# → b'Hello, World!'
# URLセーフBase64
url_safe = base64.urlsafe_b64encode(b'data')
# → b'ZGF0YQ=='セキュリティの注意 — Base64は暗号化ではない
Base64はデータの「見た目」を変えるだけで、暗号化ではありません。 Base64エンコードされた文字列は、誰でも簡単にデコードして元のデータを読み取れます。 パスワードやAPIキーなどの機密情報をBase64でエンコードしただけで「安全」と考えるのは危険です。
Basic認証がHTTPS必須とされるのも、Authorizationヘッダーに含まれるBase64文字列が 簡単にデコードできるためです。機密データの保護には、必ずTLS/HTTPSと組み合わせるか、 AES・RSAなどの暗号化アルゴリズムを使用してください。
tools24.jpでBase64変換する
テキストやファイルのBase64エンコード・デコードを行いたい場合は、tools24.jpのエンコード・デコードツールをご利用ください。ブラウザ内で処理するため、データがサーバーに送信されることはありません。 URLセーフBase64への変換にも対応しています。