シンプルな単語をデコードする
SGVsbG8gV29ybGQ=
Hello World
末尾の = はパディングです。Hello World は 11 バイトで 3 の倍数ではないため付きます。デコード時には自動的に取り除かれます。
Base64 文字列やファイルを即座にエンコード / デコード。
最終更新
Base64 は、バイナリデータを 64 種類の印字可能な文字で表現するためのエンコード方式です。テキストしか扱えない経路にバイト列を載せたいときに登場します。HTML に直接埋め込む小さな画像、各種トークン、メールの添付ファイル、data URL、ログに貼り付けたい値、JSON フィールドに入れるバイナリなど、用途は幅広いです。
Base64 はあくまで「エンコード」であって「暗号化」ではありません。Base64 文字列はデコーダーに通せばすぐに元の内容に戻せるため、セキュリティの境界として扱ってはいけません。Base64 の中身は実質的に公開情報だと思っておきましょう。秘匿が必要な場合は、エンコードする *前に* 暗号化しておく必要があります。
仕組みとしては、3 バイト(24 ビット)ごとに区切り、それを 64 文字の固定アルファベット(A〜Z、a〜z、0〜9、+、/)から 4 文字に書き直しています。入力の長さが 3 の倍数でないときは、末尾に = が 1 個または 2 個付いてパディングされます。Base64 文字列が = で終わっていることが多いのはこのためです。
= は最後の 4 文字グループを揃えるためのパディングで、ごく普通に現れるもの。プレーンテキストやファイルを Base64 にしたいなら「Encode」を、Base64 文字列を元に戻したいなら「Decode」を選びます。
テキスト欄に文字列を貼り付けるか、画像・PDF などのファイルをドロップゾーンにドラッグします。ファイルは HTML や CSS にそのまま埋め込める data: URL の形に変換されます。
エンコード時の出力は Base64 文字列です。デコード時はもとのテキストが表示され、入力がファイルだった場合は復元されたバイト列がダウンロードリンクとして得られます。
コピーボタンを押せば結果がクリップボードに入ります。処理はすべてブラウザ内で完結するので、入力した内容が外部に送信されることはありません。
Base64 を扱い始めると何度も出てくる用語のまとめ。仕様は RFC 4648 で定義されています。
| 要素 | 意味 | 例 |
|---|---|---|
| アルファベット | 標準 Base64 で使う 64 文字 | A–Z、a–z、0–9、+、/ |
| URL セーフ版 | JWT や URL で使われる文字集合 | A–Z、a–z、0–9、-、_ |
| パディング | 長さが 3 の倍数でないときに末尾を埋める文字 | = または == |
| グループサイズ | 1 ブロックあたりのバイト数 → 出力文字数 | 3 バイト → 4 文字 |
| サイズ増加 | 出力は入力比でおよそ 33% 増える | 100 B → 136 文字 |
| data URL | HTML/CSS にファイルを直接埋め込む形式 | data:image/png;base64,... |
SGVsbG8gV29ybGQ=
Hello World
末尾の = はパディングです。Hello World は 11 バイトで 3 の倍数ではないため付きます。デコード時には自動的に取り除かれます。
{"role":"student","active":true}eyJyb2xlIjoic3R1ZGVudCIsImFjdGl2ZSI6dHJ1ZX0=
JWT の各セグメントもまさにこの方式でエンコードされています。JWT のペイロード部分が大抵 eyJ で始まるのは、これが {" の Base64 表現だからです。
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgAAIAAAUAAen8GVAAAAAASUVORK5CYII=
プレフィックスでメディアタイプ(image/png)とエンコード方式(base64)を宣言しています。カンマ以降がファイル本体です。ページと同時に読み込みたい極小の画像などに便利です。
Pj4/Pyc+Pg==
Pj4_Pyc-Pg
URL セーフ版では + を - に、/ を _ に置き換えます。これにより、追加のエスケープなしに URL の中にそのまま入れられます。JWT もこの形式です。
= パディングを手で削った文字列を、パディングを必須とする厳格なデコーダーに渡してしまう(URL セーフのデコーダーは欠落に寛容なことが多いが、標準デコーダーは受け付けないことがある)。= が 1 個または 2 個付加されます。atob()、Node.js なら Buffer.from(str, 'base64')、Python なら base64.b64decode() です。= が付くのはなぜ?= はパディングです。Base64 は入力 3 バイトごとに 4 文字を出力します。入力長が 3 の倍数でないとき、出力長を 4 の倍数に揃えるために = が 1 〜 2 個付け足されます。data:image/png;base64,... 形式の URL にすれば、別途のリクエストなしに画像を HTML、CSS、JSON へ直接埋め込めます。