# Base64エンコーダー・デコーダー — URL・HTMLエンティティ・16進・エスケープも

Base64、パーセントエンコード、HTMLエンティティ、16進、バックスラッシュのエスケープを双方向で。よそのサーバーに貼り付けるものは何もありません。

> Base64を2つのアルファベットでエンコード・デコードし、URLをパーセントエンコードし、HTMLエンティティをエスケープし、16進とバックスラッシュのエスケープを読みます。すべてブラウザの中で動き、アップロードは一切ありません。トークンが手元の端末を離れることはありません。

これはhttps://abox.tools/ja/base64/にあるブラウザー用の対話型ツールです。ファイルはそのブラウザーを実行する端末上で処理します。意図した共有や任意の通信機能はページ内で説明します。以下は文章による説明です。利用するにはアドレスを開いてください。

## テキストは**ブラウザー内で処理**されます。処理のためのアップロードはありません。

ここにあるどのエンコードも文字列に対する計算で、このページの中で行われます。コーデックは手書きで`src/encode.js`にあります。それ以外は何もありません。この道具にはどんなネットワーク機能もありません。取りに行く先も、送る先もありません。それがほぼどこよりも効いてくるのがここです。人がオンラインのBase64デコーダーに貼り付けるものはトークンで、トークンを他人のサイトに貼り付けるのは、相手に手渡すのと同じことだからです。

- ✗ アップロードなし
- ✗ 登録なし
- ✗ サイズ制限なし
- ✓ オフラインで動作
- ✓ ソース公開

## Base64をアップロードせずにエンコード・デコードする手順

1. **エンコードを選びます。** 2つのアルファベットのBase64、値1つまたはURL全体のパーセントエンコード、5つのHTMLエンティティ、16進のバイト、そして文字列リテラルのバックスラッシュのエスケープ。メニューの下の説明が、それぞれの用途を教えてくれます。
2. **向きを選びます。** *エンコード*は平文を受け取ってエンコード済みの形を作り、*デコード*はエンコード済みの形を平文に戻します。結果は入力に付いてくるので、向きの切り替えはクリック1回、打ち直しはありません。
3. **貼り付けるか、ファイルをドロップします。** 選択してコピーできるものなら何でも構いません。選択欄に落としたファイルはお使いのブラウザが読んで欄に入れます。省略できるアップロードの段階が、そもそもありません。
4. **エラーが出たら読みます。** ここで失敗するデコーダーは、何を見つけたかを言います。Base64が使わない文字、間違った位置のパディング、テキストではないバイト。それらしくて間違ったものを返す代わりにです。
5. **結果を持ち帰ります。** コピーするか、テキストファイルとしてダウンロードしてください。欄の下のカウンターが、何バイト入って何バイト出たかを教えてくれます。

## 詳しい解説

[Base64は暗号化ですか？](https://abox.tools/ja/guides/is-base64-encryption/): いいえ。そしてその違いは実務で効いてきます。符号化と暗号化とハッシュは三つの別の問題を解きます。ひとつは誰でも戻せて、ひとつは鍵の持ち主だけが戻せて、ひとつは誰にも戻せません。どれがどれか、見た目での見分けかたと一緒に。

## 箱の中のほかのツール

- [テキストとファイルの共有](https://abox.tools/ja/share-text/): 共有はこの開いたタブの中だけに存在します。読む側は暗号化された内容をあなたのブラウザから直接受け取り、タブを閉じれば終わり。どのサーバーにも何も残りません。
- [QRコード・バーコード作成ツール](https://abox.tools/ja/qr-barcode/): 打ち込めば、そのままコードになります。作るために何かを送ることはありません。
- [QRコード・バーコード読み取りツール](https://abox.tools/ja/qr-barcode-reader/): コードにカメラを向けるか、写った画像を置いてください。読むのはここだけ、ほかのどこでもありません。
- [ハッシュとチェックサム](https://abox.tools/ja/hash-checksum/): 配布元が出した数字とダウンロードを照らし合わせる。どこにも送らずに。

## よくある質問

### テキストはどこかにアップロードされますか？

いいえ。このページのエンコーダーもデコーダーも、お使いのブラウザの中で、お手元のハードウェアで動く関数です。この道具にはどんなネットワーク機能もありません。何かを取りに行くことも、送ることもありません。ページの`Content-Security-Policy`には接続してよいアドレスがすべて書かれていて、そのどれもこのサイトのものではありません。アクセストークンやセッションのクッキーをここで扱う理由はそれです。そういうものを他人のデコーダーに貼り付けるのは、相手に渡すのと同じことだからです。

### ここのBase64は、ほかと同じBase64ですか？

同じです。自分自身とではなく、RFC 4648のテストベクトルと突き合わせて確かめています。どちらのアルファベットもデコードできるので、`-`と`_`で書かれたJWTも、`+`と`/`のものと同じように読めます。64文字で折り返された入力は、こちらでつなぎ直します。エンコードはUTF-8のバイト単位なので、アクセント付きの文字も絵文字も往復して無事です。

### Base64は暗号化ですか？

いいえ。そう思い込むのが典型的な間違いです。Base64は綴り方です。同じバイト列を、URLでもメールでもJSONの文字列でも生き残るアルファベットで書いたものにすぎません。誰でも読み戻せます。このページは1ミリ秒でやります。つまり何も隠さず、何も守りません。手元にあるものが秘密なら、エンコードの前に本物の暗号化が必要です。代わりにではなく。

### デコードはなぜ失敗したのですか？

貼り付けたものが、コーデックに伝えたとおりのものと少し違うからで、エラーはどこが違うかを言います。Base64のアルファベットにない文字、間違った位置のパディング、後ろに16進2桁のないパーセント記号、あるいはBase64からは解けてもUTF-8のテキストではないバイト列。最後のものはたいてい、元が文字列ではなくファイルだったという意味です。ブラウザの`atob`なら代わりにそれらしい何かを返していたでしょう。教えてもらえること自体が、デコーダーに何かを貼り付ける意味のすべてです。

### 2つのウェブアドレス用エンコードは何が違うのですか？

値1つか、アドレス全体かです。*値1つ*のエンコードは、URLが意味を持たせるものすべて（スラッシュ、疑問符、アンパサンド）をエスケープします。クエリ文字列のパラメーター1つに欲しいのはこれです。*URL全体*のエンコードはアドレスを動くままにします。スラッシュと`?`は残り、URLがそもそも運べない文字だけがエスケープされます。前者をアドレス全体に使うとアドレスが壊れ、後者を値に使うと値の終わりがどこか分からなくなります。

### どれくらい大きいファイルまで扱えますか？

ここに上限は設けていません。その費用を払うサーバーが存在しないからです。実際の頭打ちはお使いの端末です。数メガバイトのテキストなら問題ありません。とても長い文書では、キーボードを取り合う代わりに、入力が一息つくのを待ってからエンコードし直します。

### 無料ですか。アカウントは必要ですか？

無料です。アカウントも、ログインも、試用期間もなく、貼り付けられる量にも制限はありません。このサイトには広告があり、それが費用を賄っています。広告にテキストの情報が渡されることはありません。

### オフラインでも動きますか？

動きます。ページを一度読み込んでから通信を切っても、そのまま使えます。何もアップロードされていないことを示す、いちばん簡単な方法でもあります。デコードのためにテキストをどこかへ送っている道具なら、線を抜いた瞬間に止まるからです。

## この主張を確かめる方法

- **処理はこのブラウザー内で行います。** 入力と結果はブラウザー内で処理し、処理コードはそれらを処理用にアップロードしません。Content-Security-Policyは資源と接続先を制限しますが、許可済みの相手はリクエストを受け取れます。内容は検査せず、何も送られないことを単独で証明しません。具体的な操作の要求とソースを比較するか、切断中にローカル操作を完了してください。
- **ここからは何も取りに行きません。** `src/`のどこにも`fetch`も、`XMLHttpRequest`も、`sendBeacon`もありません。どのエンコーダーも、どのデコーダーも、文字列を受け取って文字列を返す、このページの中の関数です。
- **何かがおかしいときは、デコーダーがそう言います。** ブラウザの`atob`は、拒むべき入力を受け取ってそれらしい何かを返します。ここのBase64は手書きで、RFC 4648のテストベクターで検証していて、貼り付けたものがBase64でなければ、そうであることも、その理由も言います。`tests/js/text-encode.test.js`のテストが確かめているのは、まさにそれです。
- **Googleが読み込むものと、渡されないもの。** 広告と計測のスクリプトはGoogleから、寄付ボタンはBuy Me a Coffeeから来ています。そのどれにも、あなたのテキストは1文字も渡されません。テキストを読み、解析し、書き出すコードはすべてこのオリジンから配信され、リポジトリに載っています。
- **オフラインで動きます。** 通信を切ってもこの道具は何も変わりません。もともと通信する段階が存在しないからです。これがいちばん単純な証明です。

**自分で確かめてください。**以上のどれも、鵜呑みにする必要はありません。このページは、リポジトリにあるテンプレートと設定から、誰でも読んで実行できるビルドスクリプトが生成しています。その結果は`dist`ブランチに置いてあるので、配信されているものと、ソースをビルドした結果とを差分で比べられます。 https://github.com/A-Box-of-Tools/website

まず読むとよいのは、Content-Security-Policyについては`config/site.toml`、そして`src/encode.js`を読んでください。ここのBase64は自分自身ではなくRFC 4648のテストベクターで検証していて、`atob`のようにそれらしい何かを返す代わりに、正しくない入力を拒みます。
