Base64 エンコード / デコード

テキストを Base64 形式にエンコード、または Base64 文字列をテキストにデコード。日本語(UTF-8)完全対応、URLセーフ Base64 にも対応。

テキスト
Base64

Base64エンコード・デコードツールの使い方

このツールを使えば、テキストとBase64文字列を簡単に相互変換できます。以下の手順でご利用ください。

  1. モードを選択:画面上部のタブから「エンコード」「デコード」「URLセーフ エンコード」「URLセーフ デコード」のいずれかを選びます。
  2. テキストを入力:左側のテキストエリアに変換したい文字列を入力します。日本語を含むあらゆるUTF-8テキストに対応しています。
  3. リアルタイム変換:入力と同時に右側のテキストエリアに変換結果が表示されます。サーバーへの送信は一切行わず、すべてブラウザ内で処理されます。
  4. 結果をコピー:右側パネルのコピーボタンをクリックすると、変換結果がクリップボードにコピーされます。

Base64エンコードの仕組み

Base64は、RFC 4648で標準化されたエンコード方式です。バイナリデータ(0と1の列)をテキスト形式に変換することで、テキストベースのプロトコルでもバイナリデータを安全にやり取りできるようにします。

具体的な変換の流れは以下の通りです。まず、入力データを6ビットずつのグループに分割します。通常のバイトは8ビットですが、Base64では6ビット単位で処理します。3バイト(24ビット)の入力が、4つの6ビットグループ(4文字)に変換されます。

各6ビットグループ(0〜63の値)は、以下のBase64文字テーブルに従って1文字のASCII文字にマッピングされます。

  • A〜Z(値0〜25)
  • a〜z(値26〜51)
  • 0〜9(値52〜61)
  • +(値62)、/(値63)

入力バイト数が3の倍数でない場合、パディング文字 = が末尾に追加されます。入力が1バイト余る場合は == が、2バイト余る場合は = が付きます。例えば、「A」(1バイト)をBase64エンコードすると QQ== となり、「AB」(2バイト)は QUI= となります。

標準Base64とURLセーフBase64の違い

標準Base64(RFC 4648 §4)では文字 + と / を使用しますが、これらはURLにおいて特別な意味を持つため、URLパラメータやファイル名に直接使用すると問題が生じます。

URLセーフBase64(RFC 4648 §5)は、この問題を解決するために + を -(ハイフン)に、/ を _(アンダースコア)に置き換えた変種です。さらに、パディングの = もURLでは %3D にエスケープが必要なため、通常は省略されます。JWT(JSON Web Token)のヘッダーやペイロード部分には、このURLセーフBase64が使用されています。

Base64の主な用途

Base64はさまざまな場面で活用されています。代表的な用途を詳しく見てみましょう。

メール添付(MIME):電子メールのプロトコル(SMTP)は元々7ビットASCIIテキストのみを扱う設計でした。画像やPDFなどのバイナリファイルを添付するために、MIME規格ではBase64エンコードが使われています。メールソフトが自動的にエンコード・デコードを行うため、ユーザーが意識することはほとんどありません。

Data URI:HTMLやCSSの中に小さな画像やフォントを直接埋め込む際に使用します。例えば、data:image/png;base64,iVBORw0KGgo... のような形式で、外部ファイルへのHTTPリクエストを減らしてページ読み込み速度を向上させることができます。

JWT(JSON Web Token):Webアプリケーションの認証で広く使われるJWTは、ヘッダー・ペイロード・署名の3つの部分で構成され、ヘッダーとペイロードはURLセーフBase64でエンコードされます。例:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.署名

HTTP Basic認証:ユーザー名とパスワードを ユーザー名:パスワード の形式でBase64エンコードし、Authorization: Basic dXNlcjpwYXNz のようにHTTPヘッダーに含めて送信します。ただし、Base64は暗号化ではないため、必ずHTTPS通信と併用する必要があります。

XMLやJSONへのバイナリ埋め込み:テキスト形式のデータフォーマットにバイナリデータを含めたい場合にBase64が使われます。APIレスポンスで画像データを返す場合や、設定ファイルに証明書を埋め込む場合などが該当します。

日本語テキストのBase64エンコード(UTF-8の扱い)

日本語などのマルチバイト文字をBase64エンコードする際には、まず文字列をバイト列に変換する文字エンコーディングが重要になります。現在のWeb標準ではUTF-8が主流です。

例えば、「あ」という文字はUTF-8で 0xE3 0x81 0x82 の3バイトになります。これをBase64エンコードすると 44GC となります。同じ「あ」でもShift_JISでは 0x82 0xA0 の2バイトとなり、Base64の結果も異なります。

このツールではUTF-8エンコーディングを使用しているため、Pythonの base64.b64encode("テキスト".encode("utf-8")) や、JavaScriptの btoa(unescape(encodeURIComponent("テキスト"))) と同じ結果が得られます。他のシステムと連携する際は、文字エンコーディングが一致しているか必ず確認してください。

Base64は暗号化ではない(セキュリティ上の注意点)

Base64はエンコード(符号化)であり、暗号化(encryption)ではありません。これは非常に重要なポイントです。Base64エンコードされた文字列は、誰でも即座にデコードして元のデータを取得できます。秘密鍵や特別な知識は一切不要です。

したがって、パスワード、APIキー、個人情報などの機密データをBase64でエンコードしただけでは、まったくセキュリティ対策になりません。機密データを保護するには、AESやRSAなどの適切な暗号化アルゴリズムを使用してください。

HTTP Basic認証でBase64が使われていますが、これはデータ形式の変換が目的であり、セキュリティはHTTPS(TLS)による通信の暗号化に依存しています。Base64単体ではセキュリティを提供しないことを常に意識しましょう。

よくある質問(FAQ)

Base64エンコードとは何ですか?

Base64エンコードは、バイナリデータを64種類のASCII文字(A-Z、a-z、0-9、+、/)とパディング文字(=)を使ってテキスト形式に変換するエンコード方式です。RFC 4648で標準化されており、メール添付やData URIなどで広く使われています。3バイトの入力データが4文字のASCIIテキストに変換されるため、データサイズは約33%増加します。

Base64は暗号化ですか?

いいえ、Base64は暗号化ではありません。Base64は単なるエンコード方式であり、誰でも簡単にデコードして元のデータを復元できます。パスワードやAPIキーなどの機密データをBase64でエンコードしても安全ではありません。機密データの保護にはAESやRSAなどの暗号化アルゴリズムを使用してください。

URLセーフBase64とは何ですか?

URLセーフBase64(RFC 4648 §5)は、標準Base64の「+」を「-」に、「/」を「_」に置き換え、末尾のパディング「=」を省略した形式です。URLやファイル名で特殊文字として扱われる +、/、= を避けることで、URLパラメータやファイル名に安全に使用できます。JWT(JSON Web Token)でもこの形式が採用されています。

なぜBase64を使うのですか?

Base64は、バイナリデータをテキストのみを扱うプロトコルやフォーマットで安全に転送するために使います。電子メール(SMTP/MIME)、CSSのData URI、JWT、HTTP Basic認証、XMLやJSONへのバイナリデータ埋め込みなどが代表的な用途です。テキストベースの仕組みの中でバイナリデータを壊さずにやり取りできるのがBase64の最大の利点です。

Base64エンコードするとデータサイズはどうなりますか?

Base64エンコードすると、データサイズは元の約1.33倍(約33%増)になります。これは3バイト(24ビット)の入力が4文字(32ビット)の出力に変換されるためです。例えば、元のデータが300バイトの場合、Base64エンコード後は約400文字(400バイト)になります。さらに、MIMEでは76文字ごとに改行が挿入されるため、若干のオーバーヘッドが追加されます。