APIの認証ヘッダー、メールの添付、設定ファイルに埋め込まれた文字列。Base64は「暗号」ではなく、バイナリを文字だけで表すための変換方式です。誰でも元に戻せます。ここを誤解したまま機密情報を入れてしまう事故が、実際によく起きています。
このツールは、テキストとBase64を相互に変換します。日本語(UTF-8)に対応し、URLに埋め込める「URLセーフ」形式にも切り替えられます。画像などのファイルを選べば、HTMLやCSSに直接埋め込めるdata URI形式で出力します。
すべての処理はブラウザの中で完結し、入力した内容もファイルもサーバーへ送信されません。
Base64エンコード・デコード
日本語(UTF-8)に対応。ブラウザ内で処理し、データは送信されません。
- MODE
- エンコード
- INPUT SIZE
- –
- OUTPUT SIZE
- –
- 増加率
- –
FILE / ファイルをBase64にする
画像などを選ぶと、data URI形式で出力します(5MBまで)。
Base64は暗号ではない|最も多い誤解
Base64された文字列は、一見すると意味の分からない英数字の羅列に見えます。そのため「読めないから安全」と考えてしまいがちですが、鍵は不要で、誰でも一瞬で元に戻せます。このページの「Base64 → テキスト」を押すだけです。
| Base64 | 暗号化(AESなど) | ハッシュ(SHA-256など) | |
|---|---|---|---|
| 目的 | バイナリを文字で表現する | 鍵を持つ人だけが読めるようにする | 同一性の検証 |
| 鍵 | 不要 | 必要 | 不要 |
| 元に戻せるか | 誰でも戻せる | 鍵があれば戻せる | 戻せない |
| 秘密の保持 | できない | できる | — |
実際に起きている事故。Basic認証のヘッダー(Authorization: Basic …)は、IDとパスワードをコロンでつないでBase64しただけの文字列です。これをログに残すと、パスワードを平文で記録しているのと同じです。設定ファイルやスクリーンショットにも、同じ理由で注意が必要です。パスワードそのものの扱いはパスワード管理の記事にまとめています。
サイズが約1.33倍になる理由
Base64は、3バイトのデータを4文字に置き換えます。使える文字が64種類(A-Z、a-z、0-9、+、/)に限られるため、1文字で6ビットしか表現できないからです。
| 元のサイズ | Base64後 | 増加 |
|---|---|---|
| 3 B | 4 B | +33% |
| 100 KB | 約133 KB | +33% |
| 1 MB の画像 | 約1.33 MB | +33% |
この増加率が、実務上の判断に効いてきます。画像をdata URIとしてHTMLやCSSに埋め込むと、ファイルは3割ほど大きくなり、しかもブラウザのキャッシュが効きません。使いどころを間違えると、表示速度が落ちます。
| 用途 | data URI埋め込み | 理由 |
|---|---|---|
| 小さなアイコン(数KB) | 向いている | 通信の往復が1回減る。サイズ増加より効果が大きい |
| メールで使う画像 | 向いている | 外部読み込みはブロックされることが多い |
| 写真・大きな画像 | 向いていない | サイズが3割増え、キャッシュも効かない |
| 複数ページで共有する画像 | 向いていない | ページごとに毎回ダウンロードされる |
URLセーフ形式は、何が違うのか
通常のBase64は + と / を使いますが、この2文字はURLの中で別の意味を持ちます。そのままURLに入れると壊れるため、置き換えた形式が用意されています。
| 通常 | URLセーフ | |
|---|---|---|
| 62番目の文字 | + | –(ハイフン) |
| 63番目の文字 | / | _(アンダースコア) |
| 末尾の詰め物 | = | 省略されることが多い |
| 使われる場所 | メール、設定ファイル | URL、JWT、ファイル名 |
JWT(ログイン状態を表すトークン)は、このURLセーフ形式で作られています。ピリオドで区切られた3つの部分のうち、最初の2つはBase64を解くだけで中身が読めます。ここにも秘密情報を入れてはいけない、という原則が同じように当てはまります。
デコードできないときの原因
| 原因 | 症状 | 対処 |
|---|---|---|
| 文字が欠けている | コピー時に末尾が切れた | 元のデータからコピーし直す |
| 改行が混ざっている | メール由来のBase64は76文字ごとに改行される | 当ツールは自動で除去します |
| URLセーフ形式 | – や _ が含まれている | 当ツールは自動で判別します |
| = が足りない | 末尾の詰め物が省略されている | 当ツールは自動で補います |
| そもそもBase64ではない | 16進数やURLエンコードだった | 形式を確認する。URLエンコードのツールも用意しています |
| UTF-8ではない | 元がShift_JISなどのバイナリ | テキストとしては復元できない。バイナリのまま扱う |
なお、画像やPDFをBase64にしたものを「テキストとして」デコードすることはできません。元がバイナリなので、文字として意味をなさないためです。その場合はdata URI形式のまま、ブラウザのアドレス欄に貼り付けると内容を確認できます。
Base64が使われている、身近な場所
| 場所 | 理由 |
|---|---|
| メールの添付ファイル | メールの規格は文字しか運べない。バイナリを文字に変換する必要がある |
| data URI(HTML・CSS内の画像) | 外部ファイルを読みに行かずに済む |
| Basic認証のヘッダー | IDとパスワードを1つの文字列にまとめるため |
| JWT(認証トークン) | URLやヘッダーに安全に載せるため |
| APIキーの受け渡し | 改行や特殊文字を含む鍵を1行にするため |
| 証明書ファイル(PEM形式) | BEGIN CERTIFICATE で始まるあの中身がBase64 |
どれも共通しているのは、「文字しか通せない場所に、文字以外のデータを通す」という目的です。秘密を守るための仕組みではない、という点だけ押さえておけば、使い方を誤ることはありません。
JWTの中身を、Base64で読んでみる
ログイン状態を表すJWT(JSON Web Token)は、ピリオドで区切られた3つの部分でできています。前の2つはBase64(URLセーフ形式)を解くだけで読めます。
| 部分 | 中身 | 読めるか |
|---|---|---|
| 1つ目(ヘッダー) | 署名の方式など | 読める |
| 2つ目(ペイロード) | ユーザーID、有効期限、権限など | 読める |
| 3つ目(署名) | 改ざん検知用の署名 | 読めない。検証にのみ使う |
試すときは、URLセーフのチェックを入れて「Base64 → テキスト」を実行し、ピリオドで区切った2つ目だけを貼り付けてください。JSONが出てきます。JSON整形ツールに通せば読みやすくなります。exp は有効期限で、値はUNIXタイム(秒)です。UNIXタイム変換で日時に直せます。
ここから分かる重要なこと。JWTのペイロードは暗号化されていません。署名は「改ざんされていないこと」を保証するだけで、「中身を隠すこと」はしません。したがって、JWTにパスワードや個人情報を入れてはいけません。ブラウザに保存されたトークンを見れば、誰でも中身を読めます。
data URIの書式と、使いどころの見極め
このツールでファイルを選ぶと出力される data:image/png;base64,.... という形式は、ファイルの中身をURLとして表現したものです。書式は3つの部分でできています。
| 部分 | 例 | 意味 |
|---|---|---|
| スキーム | data: | これがdata URIであることを示す |
| MIMEタイプ | image/png | 中身の種類。省略するとtext/plain扱い |
| エンコード指定 | ;base64 | これがないと、URLエンコードとして解釈される |
使いどころの判断は、サイズとキャッシュのトレードオフで決まります。
| 状況 | data URI | 通常の画像ファイル |
|---|---|---|
| 数KBのアイコン1つ | 有利。通信の往復が減る | — |
| 同じ画像を複数ページで使う | 不利。ページごとに毎回読み込む | 有利。2回目以降はキャッシュ |
| 数百KB以上の画像 | 不利。サイズが3割増える | 有利 |
| メールに埋め込む | 有利。外部読み込みは遮断されがち | 不利 |
| CSSの背景に使う小さな模様 | 有利 | — |
目安として、2〜3KB以下の画像はdata URI、それ以上はファイルと考えると、大きく外しません。表示速度の考え方はWordPressの高速化にまとめています。
Basic認証のヘッダーを、実際に組み立ててみる
Basic認証は、「ID:パスワード」という文字列をBase64にしただけのものです。仕組みを知るために、実際に試してみてください。
| 順番 | やること |
|---|---|
| 1 | 入力欄に testuser:testpass と入力する(本物の認証情報は使わないこと) |
| 2 | 「テキスト → Base64」を押す |
| 3 | 出てきた文字列の前に Basic を付けたものが、Authorizationヘッダーの中身になる |
| 4 | 「入れ替え」を押すと、元のID:パスワードに戻ることを確認する |
4番目を実際にやってみると、Basic認証のヘッダーが平文と変わらないことが体感できます。だからこそ、Basic認証は必ずHTTPS上で使う必要があり、ログやスクリーンショットに残してはいけません。認証まわりの安全な設計は二段階認証の記事を参照してください。