Base64エンコーダー・デコーダー

ブラウザ内で動作し、何もアップロードされません

テキストやファイルをBase64にエンコード、またはBase64をテキスト・バイト列・画像にデコードします。入力が無効な場合は、その文字を示します。

Text

Base64

Base64 appears here as you type.

Ready

Base64とは?

Base64は、任意のバイト列を64個の安全な文字だけで表す方法です。使う文字は A–Z、a–z、0–9、+、/ で、末尾のパディングに = を使います。入力3バイトが出力4文字になるため、エンコード後のデータは元より約3分の1大きくなります。

Base64が使われるのは、多くのシステムがテキストしか確実に扱えないからです。画像、ファイル、暗号鍵などのバイナリデータを、JSON、メール、URL、HTTPヘッダーの中に入れても、途中で壊れずに届けられます。

アルファベットは2種類あります。標準(RFC 4648)は + と / を使います。URLセーフ版はその代わりに - と _ を使い(+ と / はURLの中で意味を持つため)、通常は = のパディングを省きます。JWTが使っているのはこちらです。メール(MIME)では標準のBase64を76文字ごとに改行します。

API開発では頻繁に目にします。HTTPのBasic認証は username:password(ユーザー名:パスワード) をBase64にして Authorization ヘッダーで送りますし、JWTの各パートはURLセーフなBase64です。ファイルやサムネイルをJSONの中でBase64文字列や data: URLとして返すAPIも多くあります。Base64は暗号化ではなくエンコードなので、誰でもデコードできます。

使い方

  1. 1Encode か Decode を選びます。切り替えても入力した内容は残ります。Swap(Alt+Shift+S)は出力を入力に移し、モードを切り替えます。
  2. 2エンコードするには、テキストを入力するか(UTF-8としてエンコードされます)、ファイルをドロップまたは開いて、そのバイト列をそのままエンコードします。URL-safe、Wrap at 76、data: URL で結果の形式が変わります。
  3. 3デコードするには、Base64、改行の入ったMIME形式のBase64、または data: URL全体を貼り付けます。アルファベットの種類や足りないパディングは自動で判別され、どの形式だったかはステータスバーに表示されます。
  4. 4入力が有効なBase64でない場合、エディター上でその文字がマークされ、F8で移動できます。メッセージには、アルファベット以外の文字やパディングの数の誤りなど、何が問題かが表示されます。
  5. 5デコード結果がテキストならテキストとして表示されます。UTF-8テキストでないバイト列は16進ダンプで、画像はプレビューで表示され、Download(Ctrl+S)で正しい拡張子のファイルとして保存できます。

トラブルシューティング

. はBase64の文字ではありません
入力はおそらくJWTです。JWTは3つのパートがドットで区切られています。パートごとにデコードするか、トークンをJWTデコーダーに貼り付けてください。
% はBase64の文字ではありません
このBase64はURL用にパーセントエンコードされています(+ が %2B に、= が %3D に変わっています)。先にURLデコーダーでデコードしてください。
1文字足りない、または多い
Base64は4文字単位ですが、この文字列は最後のグループが1文字しかありません。コピーするときに途中で切れた可能性がほぼ確実です。
デコードしたバイト列がUTF-8テキストではありません
データがバイナリ(画像、zip、鍵など)か、Latin-1など別の文字コードのテキストです。Hex表示で確認するか、テキストとしてコピーせずにバイト列をダウンロードしてください。
絵文字があるはずの場所に � が出る
エンコードしたテキストに絵文字の半分が含まれていました。たいていは絵文字の途中で文字列を切ったのが原因です。ステータスバーがその文字を示します。半分だけの文字はエンコードできないため、U+FFFDになります。

よくある質問

データはサーバーに送信されますか?

いいえ。エンコード、デコード、画像プレビューはブラウザ内で行われ、開いたファイルもローカルで読み込まれます。貼り付けたテキストは、消去するかタブを閉じるまでこのタブのsession storageに保存されるので、再読み込みしても消えません。Copy link はテキストをリンクの # の後ろに入れますが、ブラウザはこの部分をサーバーに送りません。URL-safe など選んだオプションは、このブラウザに記憶されます。

同じ文字数なのに、エンコード結果の長さが違うのはなぜですか?

Base64がエンコードするのは文字ではなくバイトです。UTF-8では英字は1バイト、アクセント付きの文字は2バイト、日本語の多くの文字は3バイトなので、そうした文字のテキストはBase64が長くなります。

Basic認証のヘッダーはどうやってデコードしますか?

Authorization ヘッダーの Basic より後ろの部分を取り出し、ここでデコードします。結果はコロンで区切られたユーザー名とパスワードです。

`=` のパディングは必要ですか?

このツールを含め、ほとんどのデコーダーはパディングなしのBase64を受け付けます。URLセーフなBase64では通常省略されます。厳密なデコーダーの中には必須のものもあり、標準のBase64は長さが4の倍数になるようにパディングを付けます。