Base64 エンコード/デコード
テキストをBase64に変換したり、入力と同時にリアルタイムでデコードして戻したりできます。UTF-8に完全対応しているため、アクセント付き文字、絵文字、非ラテン文字も両方向で正しく変換されます。
Base64の用途
バイナリセーフなテキストであり、暗号化ではありません。
Base64は任意のバイト列を、文字・数字・+・/ のみを使う文字列に変換します。生のバイナリデータでは問題が起きるJSON、URL、メールなどに安全に埋め込めます。これは暗号化ではありません。誰でも即座に元に戻せるため、それ自体では何も隠したり保護したりしません。
URLセーフ版
標準のBase64にある + と / の文字はURLの中で特別な意味を持ちます。URLセーフ版ではこれらを - と _ に置き換え、末尾の = パディングを取り除くため、結果をそのままクエリ文字列やファイル名に使用できます。
仕組み
エンコード時には、まずブラウザの TextEncoder APIによってテキストが生のUTF-8バイト列に変換され、そのバイト列が組み込みの btoa() 関数に渡されます。この最初のステップが重要です。btoa() 単体ではLatin-1文字しか扱えず、それ以外の文字ではエラーになるため、このステップを省略するツールは絵文字やアクセント文字、非ラテン文字で静かに壊れてしまいます。デコードは同じ処理を逆順に実行します。atob() がBase64をバイト列に戻し、TextDecoder がそれをテキストに再構成します。デコーダーは意図的に寛容に作られており、空白をトリムし、標準版とURLセーフ版の両方の文字セットを受け入れ、削除された = パディングを自動的に補完します。そのためJWTやクエリ文字列からそのままコピーした断片も、手動修正なしにデコードできます。
出力は入力よりおよそ33%大きくなると考えてください。Base64は64種類の記号を使い、64種類の記号はそれぞれ6ビットしか運べないため、入力の3バイトごとに出力の4文字になります。これが、1MBの画像をBase64データURIとしてインライン化すると約1.37MBのHTMLになる理由であり、Base64が圧縮形式ではなく転送形式である理由です。
どちらの方向の変換も、このページ自身のJavaScriptの中でキー入力のたびに実行され、使用するのはブラウザに標準搭載されている btoa、atob、およびテキストエンコーディングAPIだけです。実際に確認できます。開発者ツールを開き、ネットワークタブに切り替えて自由に入力してみてください。あなたのテキストをどこかに運ぶリクエストは一切発生しません。