Base64 エンコーダー・デコーダー
無料の Base64 エンコーダー・デコーダーです。テキストを貼り付ければエンコードし、Base64 を貼り付ければ元のデータに戻します。URL セーフな文字セット、改行、パディングはすべて手元で選べます。変換はブラウザー内で完結し、何もアップロードされません。
エンコードまたはデコード
下にテキストまたは Base64 を貼り付けてください。入力に合わせてブラウザー内で変換され、アップロードも保存もされません。
上に何か貼り付けると変換します。
まだ何も変換していません。
入力したテキストは JavaScript でローカルに変換されます。サーバーに送信されることも、記録されることも、保存されることもありません。ブラウザーのストレージにも残りません。
つまずきやすい細かい点
=で埋めます。base64url は通常それを落とします。厳格なデコーダーはパディングなしの形を拒否するため、同じ文字列があるライブラリーでは通り別のライブラリーでは失敗します。+と/で終わります。どちらも URL では危険なので、base64url はこれを-と_に置き換えます。一方を他方として解釈すると、バイト列は警告もなく壊れます。Base64 は任意のバイト列を、どんなテキスト経路でも壊れない 64 種類の文字に書き換えます。暗号化でも圧縮でもありません。テキストしか許されない場所へバイナリデータを運ぶための手段で、その代わりにサイズが約 3 分の 1 増えます。このツールは双方向に変換し、何がどう変わったかをそのまま示します。
主なメリット
よくある用途
使い方
- 1.方向を選ぶ。エンコードはテキスト → Base64、デコードはBase64 → テキストを選びます。data: URI の接頭辞は自動で外されます。
- 2.入力を貼り付ける。入力に合わせて変換されます。Base64 入力の空白や改行は無視されるので、折り返された MIME ブロックもそのまま貼り付けられます。
- 3.オプションを設定する。JWT やクエリー文字列には URL セーフな文字セットを、MIME や PEM には 76 文字ごとの改行を有効にします。
- 4.コピーする、または往復させる。結果をコピーするか、反転を押して方向を入れ替えたまま入力へ戻し、元のデータに戻ることを確かめます。
つまずきやすい細かい点
Base64 は単純に見えますが、エンコーダーとデコーダーが次の 4 点のどれかで食い違うと話が変わります。どれも「ほかではデコードできるのにここだけ駄目」の実際の原因です。
=で埋めます。base64url は通常それを落とします。厳格なデコーダーはパディングなしの形を拒否するため、同じ文字列があるライブラリーでは通り別のライブラリーでは失敗します。+と/で終わります。どちらも URL では危険なので、base64url はこれを-と_に置き換えます。一方を他方として解釈すると、バイト列は警告もなく壊れます。主な機能
- 双方向に変換でき、往復用の反転ボタン付き
- 標準と URL セーフ (base64url) の文字セット
- MIME と PEM 向けに 76 文字ごとの改行を任意で付加
- パディングなし、改行入り、data: URI 形式の入力もそのまま受け付け
- 入力と出力のサイズ、エンコードによる増加量を表示
- デコード結果がテキストでない場合は 16 進表示に切り替え
- ページ読み込み後はオフラインでも動作。アカウント不要、アップロードなし
Base64 はセキュリティではありません
これははっきり書いておきます。よくある、そして高くつく誤解だからです。Base64 はエンコード方式であって暗号ではありません。鍵はなく、何も隠しません。元に戻すのは関数呼び出し一回です。「Base64 でエンコードした」パスワードやトークン、API キーは、攻撃者から見れば平文のままです。
いちばんわかりやすい例がAuthorization: Basicです。中身はユーザー名:パスワードを Base64 にしただけで、リクエストを見られる人には読めてしまいます。だからこそ HTTPS 以外で流してはいけません。テキストしか通らない経路でバイト列を運ぶには Base64 を、中身を守る必要があるときは本物の暗号化か署名付きトークンを使ってください。さらに詳しく、3 バイトが 4 文字になる仕組み、2 つの文字セット、パディング、サイズの代償までは、Base64 のエンコードとデコードのガイドをご覧ください。
よくある質問
Base64 は何に使うのですか。⌄
Base64 は、テキストしか通せない経路にバイナリデータを通すために使います。メールの添付、CSS や HTML の data: URI、PEM ファイルの証明書と鍵、JSON のフィールド、Authorization: Basic のような HTTP ヘッダーなどです。生のバイト列なら壊れるか拒否される場所でも、Base64 ならそのまま通ります。
Base64 は暗号化ですか。⌄
いいえ。エンコードと暗号化は別のものです。Base64 に鍵はなく、秘密は何も守られません。デコードは関数呼び出し一回で、このページも入力に合わせて実行しています。パスワードやトークン、その他の秘密情報を守る目的で使ってはいけません。
Base64 と base64url の違いは何ですか。⌄
違うのは 2 文字とパディングだけです。標準の Base64 は文字セットの最後が + と / で、これらは URL で特別な意味を持つため、base64url では代わりに - と _ を使い、通常は = のパディングを省きます。JWT は base64url を使います。一方を他方として解釈するとデコード結果が壊れるので、このツールは両方を受け付け、どちらだったかを表示します。
Base64 にすると元より長くなるのはなぜですか。⌄
入力 3 バイトが出力 4 文字になるため、パディングや改行を除いても結果は約 33 % 大きくなります。テキストとして安全な文字だけを使うことの代価です。サイズが問題になるなら、エンコードの後ではなく前に圧縮してください。Base64 の出力はほとんど圧縮が効きません。
デコードした文字が意味をなさないのはなぜですか。⌄
多くは次の 3 つのどれかです。元のデータがそもそもテキストではなかった(画像や鍵の場合で、このツールはバイト列を表示します)、base64url の文字列を標準 Base64 として、あるいはその逆でデコードしている、元のバイト列が UTF-8 ではなかった。変換の詳細パネルに検出した文字セットとパディングが出るので、ふつうはそれで原因がわかります。