Base64 エンコード/デコードツールの使い方
Base64 は、バイナリデータを 64 種類の印字可能な文字に変換する符号化方式です。目的は暗号化ではなく、テキストしか扱えない経路でもデータを安全に通過させることです。URL のパラメータに入れる、JSON の文字列に埋め込む、メール本文に書く、HTML の data URI に埋め込む、といった場面で使われます。
よくある利用場面
- API の認証:HTTP Basic 認証のユーザー名とパスワードは、Base64 で符号化してリクエストヘッダに入れます
- メール添付:MIME はバイナリの添付ファイルを Base64 でテキストに変換して送ります
- 画像のインライン埋め込み:小さな画像を
data:image/png;base64,...にして CSS や HTML に直接書き、リクエストを 1 回減らします - JWT:JWT のヘッダとペイロードは Base64URL で符号化された JSON です
- エスケープ問題の回避:特殊文字を含む内容を符号化して設定ファイルに入れ、エスケープの地獄を避けます
日本語が文字化けする問題について
JavaScript の btoa() で日本語を符号化すると、エラーになったり文字化けしたりする人が多いはずです。原因は btoa が Latin-1 の範囲の文字しか受け付けず、日本語はその範囲外だからです。本ツールは内部でまず TextEncoder を使ってテキストを UTF-8 のバイト配列に変換し、そのうえで Base64 符号化します。したがって日本語、中国語、絵文字も正しく符号化・復元できます。復号時も同じくバイト配列に戻してから TextDecoder でテキストに戻します。
標準 Base64 と URL セーフ Base64 の違い
標準 Base64 の文字集合には + と /、そして末尾の詰め物 = が含まれます。この 3 文字は URL で特別な意味を持ちます。+ は空白として解釈され、/ はパスの区切り、= はパラメータの代入記号です。そのため URL やファイル名に入れるときは URL セーフ変種を使い、+ を -、/ を _ に置き換え、末尾の = を削除します。JWT が使っているのはこの変種です。
復号時、本ツールは URL セーフ文字を自動的に標準文字へ戻してから処理します。どちらの変種でも手動で書き換える必要はありません。
よくある質問
Base64 は暗号化ですか?パスワードの保護に使えますか?
暗号化ではなく、単なる符号化です。誰でも無条件に復号でき、鍵も不要です。パスワードや鍵、機密データを Base64 で「暗号化」してはいけません。Base64 の「base」は 64 文字を意味するだけで、「基本版の暗号」とは何の関係もありません。
符号化するとサイズが大きくなるのはなぜ?
Base64 は 3 バイトを 4 文字で表すため、約 33% 膨らみます。互換性と引き換えの必要不可欠なコストです。サイズを減らしたいなら gzip を使うべきで、Base64 ではありません。
画像も符号化できますか?
このページが扱うのはテキストです。ただし、別の手段で画像を Base64 に変換し(コマンドラインなら base64 image.png)、そのテキストをここで処理することはできます。ブラウザ側でもファイルを読むことは理論上可能ですが、それはファイル系ツールの役割なので、今後のバージョンで追加する予定です。
改行があると復号に影響しますか?
いいえ。復号前に空白文字(スペース、改行、タブ)をすべて取り除くため、改行の有無にかかわらず正しく復号できます。