Base64 エンコーダー/デコーダー
Base64はバイナリデータを64種類のASCII文字で表現するバイナリからテキストへのエンコード方式です。JSON、XML、URLなどのテキストベースのフォーマットにバイナリデータを埋め込むために広く使用されています。このツールはBase64をデコードして元のコンテンツを表示し、結果がJSON、XML、またはその他の解析可能なフォーマットであるかを自動検出します。
仕様
よくあるユースケース
- Base64エンコードされたAPIペイロードやWebhookのデコード
- JWTトークン内のエンコードデータの検査
- メール添付ファイルのデコード(MIME Base64)
- エンコードされたエラーメッセージやスタックトレースのデバッグ
- 環境変数内のエンコードされた設定値の確認
機能
- 標準Base64をUTF-8テキストにデコード
- URLセーフBase64バリアント(+と/の代わりに-と_を使用)に対応
- デコードされたコンテンツタイプの自動検出(JSON、XMLなど)
- 構造化データが検出された場合、適切なパーサーへチェイン
- テキストをBase64にエンコード
- デコードされたバイナリ画像データの画像プレビュー
- 非UTF-8バイナリデータ用Hexビューアー
- フォーマット検出バッジ(Standard / URL-Safe / Mixed)
例
ヒント
- Base64はエンコードであり、暗号化ではありません。セキュリティは一切提供しません。
- 末尾の=パディングは一部の実装では省略可能です。
- URLセーフBase64は、URLエンコードの問題を避けるため+を-に、/を_に置き換えます。
- Base64はデータサイズを約33%増加させます。
解説 Base64 エンコーダー/デコーダー
Base64はRFC 4648で定義されたバイナリからテキストへのエンコード方式で、任意のバイナリデータを64種類の印刷可能なASCII文字(A-Z、a-z、0-9、+、/)とパディング文字(=)を使って表現します。その主な目的は、メール、JSONペイロード、XMLドキュメント、URLパラメータなど、生のバイトを正しく処理できないテキストベースのシステムを通じてバイナリデータを転送することです。
エンコードプロセスは入力の3バイト(24ビット)ごとに4つの6ビットグループに分割します。各6ビット値は64文字のうちの1つにマッピングされます。入力長が3バイトの倍数でない場合、1つまたは2つの=文字でパディングされ、出力が4文字の倍数になります。これはBase64エンコードされたデータが元のデータより約33%大きくなることを意味します。
主に2つのバリアントが存在します。標準Base64は+と/を使用し、MIMEメールエンコーディングで使われます。URLセーフBase64(base64url)は+を-に、/を_に置き換えて、URLの予約文字を避けます。JWTトークンはパディングなしのURLセーフバリアントを使用します。一部の実装では、元のデータ長が推測可能なため、末尾の=パディングを省略します。
Base64はWeb開発のあらゆる場所に登場します。データURIはHTML/CSSに画像やフォントを埋め込みます。JWTトークンは3つのBase64urlエンコードされたセグメントで構成されます。SAMLメッセージはBase64エンコードされたXMLです。APIレスポンスはJSON内でバイナリコンテンツをBase64としてエンコードする場合があります。重要なのは、Base64はエンコードであって暗号化ではないということです。セキュリティや機密性は一切提供しません。
Base64は暗号化の一種ではなく、そのように扱うべきではありません。鍵やシークレットなしにデータを異なる表現に変換するだけであり、誰でもBase64文字列を即座にデコードできます。機密データがBase64でエンコードされている場合、それは完全に露出しています。秘匿が必要なデータには、AESやRSAなどの実際の暗号化アルゴリズムを使用してください。標準Base64は文字62と63として+と/を使用し、URLセーフBase64(base64url、RFC 4648 Section 5で定義)は+と/がURLで特別な意味を持つため、それらを-と_に置き換えます。JWTトークンは常にパディングなしのURLセーフバリアントを使用します。
=パディング文字はエンコードされた出力の長さが常に4文字の倍数になることを保証します。Base64は3バイトを4文字にエンコードするため、長さが3の倍数でない入力にはパディングが必要です。余り1バイトは==を生成し、余り2バイトは=を生成します。JWTを含む一部の実装では、デコーダーがエンコードされた文字列の長さから元の長さを計算できるため、パディングを完全に省略します。
33%のサイズ増加はエンコーディングに固有のものです。3バイト(24ビット)ごとに4つのASCII文字(32ビット)になり、固定の4/3拡張比率は削減できません。サイズが問題になる場合は、エンコード前にデータを圧縮してください。大きなバイナリアセットの場合は、テキストフォーマットにBase64を埋め込むよりも、マルチパートアップロードやバイナリWebSocketフレームなどの適切なバイナリ転送メカニズムを検討してください。