エンコーディングツール

データをエンコード・デコードするためのツール — Base64、URLエンコード、そして2進数や16進数などの進数変換。すべて完全にブラウザ内で動作します。

よく使う変換

クリックするだけで、その作業用に設定済みのツールが開きます。

オンラインエンコーディングツール - ブラウザで Base64 と URL エンコード

エンコードは暗号化ではありません。何も隠さないし、何も守りません。その役目は、何かを壊してしまうデータ - テキストしか運べない経路、& を区切り文字として扱う URL、Unicode より古いメールヘッダー - を、旅路を生き延びられる文字に作り替えることです。このカテゴリのツールは、それを両方向に、完全にあなたのブラウザの中で行います。

この区別ははっきり言っておく価値があります。この分野で群を抜いて多い誤解だからです。Base64 は誰でも、鍵なしで、即座に元へ戻せます。Base64 で保存されたパスワードは、一手間増えた平文のパスワードにすぎません。秘密が必要なら、必要なのは暗号であってエンコードではありません。

このカテゴリにあるもの

ツールできること使う場面
Base64エンコーダーテキストとファイルを Base64 に、また元に戻す。URL セーフ版にも対応CSS に画像を埋め込む、API キーを読む、テキストしか通らない欄にバイナリを通す
URLエンコーダーURL とクエリ文字列の値をエンコード・デコードする最初の空白、アンパサンド、非ラテン文字でリンクが壊れる
進数変換ツール2進数・8進数・10進数・16進数、36までの任意の基数の間で変換し、テキストをバイト列に、またその逆にも変換する16進ダンプの値、ビットマスク、パーミッションを数値として読む必要がある
HTMLエンティティ変換ツール名前付きまたは数値のエンティティで HTML 用にテキストをエスケープし、どのエンティティもテキストに戻すコード例、ユーザーのコメント、エクスポートで、< や & の代わりに &lt; や &amp; が表示される

Base64 が実際にしていること

Base64 は 3 バイト(24 ビット)ずつ取り、64 文字のアルファベット - A-Z、a-z、0-9、それに + と / - から選んだ 4 文字に書き換えます。64 は 2 の 6 乗なので、出力 1 文字がちょうど 6 ビットを担います。入力が 3 で割り切れないときは = で埋め、長さが常に 4 の倍数になるようにします。

その帰結は意見ではなく算数です。Base64 の出力は入力より約 33% 大きくなります。300 KB の画像をスタイルシートに埋め込むためにエンコードすると、およそ 400 KB のテキストになります。これは実コストであり、小さなアイコンなら埋め込む価値があり、写真ではめったに割に合わない理由でもあります。

+ と / は URL の中では厄介です。そこではすでに意味を持つ文字だからです。URL セーフな Base64 はこれらを - と _ に置き換え、たいていパディングも落とします。JSON Web Token が使っているのはこちらで、両者を取り違えることが、あるツールではトークンのデコードに失敗し別のツールでは成功する理由です。

パーセントエンコーディングが実際にしていること

URL には文法があります。? がクエリ文字列を開き、& がパラメータを区切り、= が名前と値を結び、# がフラグメントを開き、空白はそもそも許されません。値にこれらの文字が含まれるならエスケープしなければ、URL は意図とは別の意味になります。パーセントエンコーディングは、その文字を % とバイト値の 16 進表記に置き換えます。空白は %20、& は %26、/ は %2F。

非 ASCII のテキストは UTF-8 バイト列としてエンコードされ、1 バイトにつき %XX が一つ付きます。ペルシア語や日本語の 1 文字は、たいてい三つのエスケープになります。非ラテン文字の検索語を含む URL が、語そのものよりずっと長く見えるのはこのためです。

落とし穴は、URL のどの部分をエンコードしているのかを把握することです。URL 全体をエンコードすると :// や / までエスケープされ、URL は壊れます。ほぼ常に、エンコードしたいのは一つのパラメータ値で、その周りに URL を組み立てるべきです。URLエンコーダーは両方できますが、選ぶのはあなたです。

進数:ほかのすべての下にあるエンコード

Base64 もパーセントエンコーディングもバイトを扱い、そのバイトはたいてい16進数か2進数で書かれます。進数変換ツールは、任意の基数で書かれた値を読み取って、ほかの基数での表記を一度に表示します。64ビットの上限はなく、「テキスト」タブでは文字列の裏にある UTF-8 のバイト列も確認できます。é がなぜ2バイトになるのか、なぜ %C3%A9 がそのパーセントエンコード形なのか、なぜ 0xFF が255なのかを確かめるには、これがいちばんの近道です。

これらのエンコードに出会う場所

  • データ URI - data:image/png;base64,... は画像を HTML や CSS に直接埋め込み、リクエストを一つ節約します。
  • HTTP Basic 認証 - ヘッダーは文字どおり Basic に続けて ユーザー:パスワード の Base64。見た人は誰でも元に戻せるので、TLS の内側にしか居場所がありません。
  • JSON Web Token - ドットで繋がれた三つの URL セーフ Base64 セグメント。ペイロードは鍵なしで読めます。
  • メールの添付 - MIME は 1990 年代初頭からバイナリを Base64 で運んでおり、今も運んでいます。
  • クエリ文字列 - 空白や記号を含む検索語、リダイレクト先、フィルタ値のすべて。
  • 設定ファイルとシークレット - Kubernetes のシークレット、サービスアカウントキー、証明書は日常的に Base64 で保存されます。

よくある失敗とその原因

  • 二重エンコード。 自分のコードとフレームワークが二度エンコードし、%20 が %2520 になる。URL に %25 が見えたら、すでにエスケープだったパーセント記号を何かがエンコードしています。
  • Base64 アルファベットの取り違え。 デコードできない JWT は、たいてい URL セーフ Base64 を標準デコーダに渡している(またはその逆)。
  • パディングの欠落。 末尾の = を落とす実装があります。厳格なデコーダは拒否し、寛容なものは補います。
  • URL 全体をエンコードした。 スキームとパスまでエスケープされ、リンクが解決しなくなります。
  • 安全だと思い込む。 クッキー、ヘッダー、設定ファイルの中の Base64 は、そのファイルを読める人には読めます。
  • クエリ文字列のプラス記号。 フォームエンコードされたデータでは + は空白、パスでは文字どおりのプラス。同じ文字に二つの意味。

ローカルで動くことが重要な理由

人がエンコード・デコードしたい文字列は、不釣り合いなほど機微なものです。認可ヘッダー、セッショントークン、サービスアカウントキー、署名付き URL。そうしたものをサーバー側で処理するサイトに貼り付けるのは、生きた資格情報を第三者に手渡すことです。ここの二つのツールはブラウザで動きます。入力がタブから出ることはなく、ネットワークパネルで確かめられます。

関連カテゴリ

よくある質問

Base64エンコーディングとURLエンコーディングの違いは何ですか?
Base64は、バイナリまたはテキストデータをdata URI、メール、JSONなどで使われるコンパクトでテキストに安全な形式に変換します。URLエンコーディング(パーセントエンコーディング)は、スペースや特殊記号などURLで直接安全に使えない文字をエスケープします。
これらのエンコーディングツールは機密データに対して安全ですか?
エンコーディングは暗号化ではありません — データの形式を変えるだけで、安全性を高めるものではありません。誰でもBase64やURLエンコードされたテキストをデコードできるため、機密情報の保護には使わないでください。いずれにせよ処理はすべてブラウザ内でローカルに行われます。
他の場所でエンコードされたデータもデコードできますか?
はい、有効なBase64またはパーセントエンコードされたテキストであれば、これらのツールは元の形式にデコードします。