文字列をBase64エンコードする方法

テキスト文字列をBase64エンコードする方法をステップごとに解説。複数言語でのコード例、主な用途、エンコード時のベストプラクティスを紹介します。

Encoding

詳細な説明

Base64エンコードは、任意のデータを印刷可能なASCII文字の文字列に変換します。テキスト文字列をエンコードする際、まず各文字がバイト表現に変換され、そのバイト列が3バイトずつのグループで処理されます。3バイト(24ビット)のグループは4つの6ビット値に分割され、各6ビット値がBase64アルファベット(A-Z, a-z, 0-9, +, /)の文字にマッピングされます。

ステップごとの仕組み:

  1. 入力文字列を取得します。例:"Hi"
  2. 各文字をASCIIバイト値に変換:H = 72, i = 105
  3. バイナリで表記:01001000 01101001
  4. 6ビット単位で分割:010010 000110 1001。最後のチャンクが4ビットしかないため、ゼロでパディングして 010010 000110 100100 とします。
  5. 各6ビット値をBase64アルファベットにマッピング:S, G, k
  6. 元の入力が2バイト(3の倍数でない)なので、パディング文字 = を1つ追加し、最終結果は SGk= となります。

JavaScriptの場合:

const encoded = btoa("Hello, World!");
// Result: "SGVsbG8sIFdvcmxkIQ=="

よくある間違い: ブラウザの btoa() 関数はLatin-1文字のみを扱えます。Latin-1範囲外の文字(絵文字やCJK文字など)を含む文字列の場合、Base64エンコードの前にまずUTF-8バイトに変換する必要があります。詳しくはUnicode/UTF-8の項目を参照してください。

Base64エンコードは決定論的であり、同じ入力からは常に同じ出力が得られます。テキストベースのフォーマットにデータを埋め込む際に信頼性がありますが、圧縮や暗号化ではないことを忘れないでください。エンコード後の出力は常に入力より約33%大きくなります。

ユースケース

HTTP Basic認証ヘッダーで、ユーザー名とパスワードの組み合わせを単一のASCII文字列として送信するためにエンコードする場合に使用します。

試してみる — Base64 Encoder

フルツールを開く