Base64エンコード・デコードについて
Base64は、任意のバイト列を64種類の印字可能な文字(A–Z、a–z、0–9、+、/)で書き表す方式です。これにより、JSONやXMLの文書、メール、HTTPヘッダー、環境変数、HTMLやCSSのdata: URLなど、テキストしか扱えない経路でもバイナリデータを送れます。3バイトごとに4文字になるため、エンコードした形は元のデータより約3分の1大きくなります。
このツールは、テキスト(UTF-8でエンコード)やファイルをBase64に変換し、元に戻します。Base64urlと呼ばれるURLセーフな形式、パディングの有無、MIME形式の改行に対応し、data: URLも扱えます。デコードでは、読み取れるテキストはすぐに表示し、それ以外はファイルとして扱い、可能な場合はデータから種類を判定します。
変換はすべてブラウザ内で行われます。ファイルはお使いのデバイス上で読み込まれ、何もアップロードされません。
使い方
- 「方向」で「エンコード」または「デコード」を選びます。
- エンコードする場合は、「テキスト」を選んで「エンコードするテキスト」に入力または貼り付けるか、「ファイル」を選んで25 MBまでのファイルを選択します。「data: URLの接頭辞を付ける」にチェックを入れると、そのまま使えるdata: URLが得られます。
- 必要に応じて、「URLセーフな文字セット(-と_)」「パディング(=)」「76文字で改行」のオプションを調整します。
- デコードする場合は、Base64または完全なdata: URLを欄に貼り付けるか、「テキストファイルを開く」を使います。読み取れるUTF-8テキストは「デコードしたテキスト」に、それ以外のデータはサイズ、種類、16進数プレビューとともに「デコードしたファイル」に表示されます。
- 結果は「結果をコピー」「テキストをコピー」「.txtをダウンロード」「ファイルをダウンロード」で保存できます。「入れ替え」で結果を逆方向の入力に送り、「クリア」で最初からやり直せます。
主な機能
- テキストとファイル: テキストはUTF-8として変換されるので、アクセント付きの文字、日本語などラテン文字以外の文字、絵文字も扱えます。25 MBまでのあらゆる種類のファイルに対応し、ブラウザのbtoa関数にあるサイズやUnicodeの問題もありません。
- 標準とURLセーフのBase64: どちらの文字セットでも、=によるパディングの有無を選んで出力できます。デコーダーは両方の文字セット、パディングの省略、スペースや改行を受け付けます。
- わかりやすい検証: 無効な入力については、どの文字が何文字目で使えないのか、Base64としてあり得ない長さなのか、パディングの位置が誤っているのかを正確に説明します。
- 双方向のdata: URL: ファイルをそのMIMEタイプを使ったdata: URLに変換できます。data: URLを貼り付ければ、そこで宣言された種類でデコードできます。
- テキストまたはファイルで出力: デコードしたバイト列が有効なUTF-8ならテキストとして表示します。それ以外のデータはダウンロード用に提供し、PNG、JPEG、GIF、WebP、PDF、ZIPは先頭のバイトから判定します。可能な場合は画像のプレビューと、先頭64バイトの16進ダンプも表示します。
使用例
Basic認証のヘッダーを作る
テキスト user:pa55word をエンコードすると dXNlcjpwYTU1d29yZA== になり、これをヘッダー Authorization: Basic dXNlcjpwYTU1d29yZA== に入れます。ヘッダーを見た人は誰でもデコードし直せることを覚えておいてください。
JSON Web Tokenのペイロードを読む
JWTの真ん中の部分は、パディングなしのBase64urlです。eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSJ9 をデコードすると {"sub":"1234567890","name":"Ada Lovelace"} が表示されます。デコードではトークンの署名は検証されません。
小さなアイコンをCSSに埋め込む
「ファイル」を選んで小さなPNGを選択し、「data: URLの接頭辞を付ける」にチェックを入れます。結果は data:image/png;base64, で始まり、background-image: url(…) や <img> のsrc属性にそのまま使えます。
APIが返したファイルを保存する
APIによっては、文書をJSON内のBase64文字列として返します。その文字列をデコードモードで貼り付けると、PDFであればapplication/pdfと判定され、「ファイルをダウンロード」でdecoded.pdfとして保存できます。
制限事項と注意点
- エンコードできるファイルは25 MBまで、デコード用に開けるテキストファイルは40 MBまでです。非常に長い結果は欄内にプレビューとして表示されますが、コピーとダウンロードでは常に結果全体が使われます。
- 内容から種類を判定できるのは、PNG、JPEG、GIF、WebP、PDF、ZIPだけです。それ以外のバイナリデータは、data: URLで種類が指定されていない限り.binファイルとして保存されます。
- テキストは常にUTF-8として扱われます。UTF-16やWindows-1252など別のエンコードのテキストをBase64にしたものは、テキストとしては表示されず、ファイルとして提供されます。
- テキスト欄に入力または貼り付けた改行は、ブラウザによってLFに正規化されます。そのため、Windows(CRLF)の改行を含むテキストはLFでエンコードされます。正確なバイト列が重要な場合は、ファイルそのものをエンコードしてください。
- 改行を入れた出力ではLFの改行を使います。厳密なMIMEではCRLFを使いますが、このツールを含むデコーダーはどちらも受け付けます。
- Base64は暗号化ではなくエンコードです。データを保護するものではなく、誰でもデコードできます。
よくある質問
Base64は暗号化の一種ですか?
いいえ。Base64はバイト列の書き表し方を変えるだけで、デコードに鍵は必要ありません。テキストしか扱えない経路でデータを運ぶために使い、パスワードなどの秘密情報を隠す目的には決して使わないでください。
Base64の末尾がよく=や==になるのはなぜですか?
Base64は3バイトずつ処理します。入力の長さが3の倍数でない場合、テキストの長さが4の倍数になるように、最後のグループを1つまたは2つの=で埋めます。JWTなど多くの形式ではこのパディングを省略しますが、このデコーダーはどちらの形も受け付けます。
Base64とBase64urlの違いは何ですか?
Base64url(RFC 4648の第5節)は、+を-に、/を_に置き換えたもので、URLやファイル名にエスケープなしで使えます。この2文字と、通常パディングを省略することを除けば、エンコード方式は同じです。
デコードすると「長さが正しくありません」と表示されるのはなぜですか?
1文字は6ビットしか表せず、1バイトに足りないため、パディングのないBase64テキストの長さが4n + 1文字になることはありません。たいていは、コピーの際にテキストが途中で切れたか、文字が加わったことが原因です。
Base64テキストが元のファイルより大きいのはなぜですか?
3バイトごとに4文字で書き表すため、エンコードしたテキストは元のデータより約33%大きくなります(改行を入れる場合はその分も加わります)。安全な印字可能文字だけを使うための代償です。
ファイルやテキストはアップロードされますか?
いいえ。エンコードとデコードはこのページのJavaScriptで行われ、ファイルはローカルで読み込まれます。サーバーには何も送信されません。