Base64 エンコード/デコード

テキストやファイルをBase64に変換、またはBase64を元のデータに復元します。

Base64 エンコード
テキストやファイルをBase64に変換
長さ: 0 文字サイズ: 0 バイト

Base64とは?

Base64はバイナリデータをASCII文字列形式で表現するエンコード方式です。メール添付ファイルのエンコード、HTMLでの画像埋め込み、XMLやJSONでの複雑なデータの保存など、様々な用途に使用されます。

Base64は64個の安全な文字(A-Z、a-z、0-9、+、/)のみを使用して、あらゆるバイナリデータをテキストに変換できます。これにより、様々なシステム間でデータを安全に送信できます。

Base64の主な用途

  • メール添付ファイル:MIMEプロトコルでバイナリファイルをテキストに変換して送信します。
  • データURL:HTMLやCSSに画像やフォントなどを直接挿入する際に使用します(例:data:image/png;base64,...)。
  • API通信:JSONやXMLなどのテキストベースの形式でバイナリデータを送信します。
  • クッキーとウェブストレージ:バイナリデータや特殊文字を含む情報を安全に保存します。
  • JWT(JSON Web Tokens):認証情報をBase64エンコードして安全に送信します。

Base64の仕組み

  1. バイナリからASCIIへの変換:Base64はバイナリデータをASCII文字セットの64文字(A-Z、a-z、0-9、+、/)を使ってテキスト文字列に変換します。
  2. エンコードプロセス:
    • バイナリデータを3バイト(24ビット)単位に分割します。
    • 各3バイトのチャンクを4つの6ビットグループに分割します。
    • 各6ビットグループをBase64文字セットの対応する文字に変換します。
  3. パディング:
    • エンコードするデータの総ビット数が6で割り切れない場合、最終データチャンクがBase64形式に合うようにパディング文字(=)が追加されます。
    • エンコードするバイト数が3の倍数でない場合、パディングが必要です。1バイト余っている場合は==が2つ、2バイト余っている場合は=が1つ追加されます。
  4. デコード:
    • Base64データをデコードするには、プロセスを逆に実行します:各文字を対応する6ビットの二進値に変換します。
    • これらの二進値を組み合わせて、元のバイナリデータを再生成します。

Base64例の分析

"Hello"というフレーズのBase64エンコードプロセスを見てみましょう:

ASCII値:

H = 72
e = 101
l = 108
l = 108
o = 111

バイナリ値:

H = 01001000
e = 01100101
l = 01101100
l = 01101100
o = 01101111

バイナリデータ(連結したビット):

01001000 01100101 01101100 01101100 01101111

6ビットセグメントにグループ化:

010010 000110 010101 101100 011011 000110 111100

各6ビットセグメントをBase64文字に変換:

010010 = S
000110 = G
010101 = V
101100 = s
011011 = b
000110 = G
111100 = 8(4 ビット残り, = パディング追加)

最終結果:

「Hello」のBase64エンコーディング結果は「SGVsbG8="

URL安全Base64とは?

標準のBase64エンコーディングは+と/の文字を使用しますが、これらはURLで特別な意味を持つため問題になる可能性があります。URL安全Base64はこれらの文字を次のように置き換えます:

  • +記号は-(マイナス)に置き換え
  • /記号は_(アンダースコア)に置き換え
  • 時には=パディングを省略してURL長をさらに短縮

これにより、URL、ファイル名、APIキーなどでBase64データを安全に使用できます。

Base64使用時のよくある間違い

  • エンコード/デコード順序の混同:データはエンコードした後デコードすると元のデータが復元されます。順序を混同するとエラーが発生します。
  • パディング文字の無視:=パディング文字は重要であり、デコード時に必要です。これを削除するとデコードエラーが発生する可能性があります。
  • バイナリデータと文字列の混同:バイナリデータをテキストとして扱ったり、その逆を行うとエンコーディングの問題が発生する可能性があります。
  • 文字エンコーディングの混同:エンコード前の元の文字列のエンコーディング(UTF-8、ASCIIなど)を考慮する必要があります。
  • 改行文字の無視:一部のBase64実装では76文字ごとに改行を追加します。これはデコード時に削除する必要があります。