Base64エンコーディングとは?完全な解説
簡単な回答
Base64 エンコードは、64 個の印刷可能な文字 (A ~ Z、a ~ z、0 ~ 9、+、/) を使用してバイナリ データをテキストに変換します。入力の 3 バイトごとに 4 Base64 文字になります。 Base64 は元に戻すことができ (暗号化ではありません)、データ サイズが最大 33% 増加します。無料の Base64 エンコーダとデコーダを使用して、ブラウザで変換します。
導入
Base64 は、バイナリ データを 64 個の印刷可能な文字を使用した ASCII 文字列表現に変換する、バイナリからテキストへのエンコード スキームです。これは RFC 4648 によって定義されており、テキストを処理するように設計されたメディア (電子メールの添付ファイル (MIME)、HTML/CSS のデータ URLs、JWT トークン部分、およびバイナリ データを含む JSON ペイロード) を介して送信する必要があるデータをエンコードするために一般的に使用されます。 Base64 は暗号化ではなくエンコードです。完全に元に戻すことができ、キーは必要ありません。 Base64 は誰でもデコードできるため、機密性は提供されません。
ステップバイステップ
-
文字セットを理解する
Base64 は、A ~ Z (26)、a ~ z (26)、0 ~ 9 (10)、+ および / (2) の 64 文字を使用します。 = 文字は、入力長が 3 の倍数ではない場合のパディングに使用されます。URL 安全なバリアントでは、+ が - に、/ が _ に置き換えられ、パディングが省略されます。
-
エンコードの仕組みを学ぶ
Base64 は、入力を 3 バイト (24 ビット) ブロックで処理します。各 24 ビット ブロックは 4 つの 6 ビット グループに分割されます。各 6 ビット値 (0 ~ 63) は、64 文字のいずれかにマップされます。入力が 3 の倍数でない場合は、パディング (=) が追加されます: 1 バイト入力 → 2 Base64 文字 + ==、2 バイト → 3 文字 + =。
-
サイズのオーバーヘッドを理解する
Base64 では、データ サイズが約 33% 増加します。つまり、3 バイトごとに 4 文字になります。 Base64 エンコードすると、1 MB のファイルは約 1.33 MB になります。このオーバーヘッドは、テキストのみの互換性とのトレードオフです。
-
エンコードと暗号化を区別する
Base64 は暗号化ではなくエンコードです。鍵を使わずに元に戻すことができ、誰でも解読できます。 Base64 は機密性を提供しません。転送のためにバイナリをテキストに変換するだけです。パスワードやシークレットを保存するために Base64 を使用しないでください。
例
テキストをエンコードする
入力: Hello, World!
出力: SGVsbG8sIFdvcmxkIQ==
バイナリ データをエンコードします (16 進数で表示)
入力: バイト: 0x00 0x01 0x02
出力: AAEC
URL 安全 Base64 (JWT スタイル)
入力: Standard: SGVsbG8= → URL-safe: SGVsbG8 (no padding, - and _ for + and /)
出力: JWT トークンと URL パラメーターで使用されます
よくある問題
- Base64 を暗号化として扱う —Base64 はキーなしで元に戻すことができます。誰でも解読できます。機密データを保護するためには決して使用しないでください。
- 非 ASCII 文字 — 単純な btoa() は Unicode でスローします。 TextEncoder + btoa(unescape(encodeURIComponent(text))) または UTF-8 対応ツールを使用します。
- パディングの削除 - = パディングはエンコーディングの一部です。これを削除するとデコードが中断されます (ただし、デコーダによっては再構築できるものもあります)。
- サイズのオーバーヘッド —Base64 により、データ サイズが最大 33% 増加します。大きなファイルの場合、これは重要です。エンコードが必要かどうかを検討してください。
ヒント
- データ URLs に Base64 を使用して、別の HTTP リクエストを行わずに、小さな画像を HTML/CSS に埋め込みます。
- URLs および JWT トークンには、URL で安全な Base64 (+ を - に、/ を _ に置き換え、パディングを削除) を使用します。
- Base64 は暗号化ではありません。機密性のためではなく、トランスポートの互換性のために使用します。
- Base64 エンコーダーとデコーダーを使用して、ブラウザーで瞬時にプライベート変換を行います。