テキストとファイルの Base64 エンコード

テキスト、生のバイト列、あらゆるファイルを Base64 に変換します。受信側が想定する文字コードを選び、= によるパディングの有無を切り替え、MIME や PEM 向けに 76 文字または 64 文字で行を折り返せます。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. エンコードするテキストを入力または貼り付けます。生のバイト列をエンコードするには「入力形式」を「16進数」に切り替え、ファイルをエンコードするには「ファイルを開く」をクリックします。
  2. 受信側のシステムが別の文字コードを想定していない限り、「文字コード」は UTF-8 のままにしておきます。
  3. オプションを設定します。ほとんどの用途では「種類」を「標準(RFC 4648)」のままにし、受信側がパディングを必要としない場合は「パディング」をオフにします。必要に応じて「折り返し」を 76(MIME)または 64(PEM)文字に設定します。
  4. Base64 の出力をコピーするか、ファイルとしてダウンロードします。

Base64 エンコードの仕組み

エンコーダーは入力を 3 バイトずつ読み取ります。その 24 ビットを 6 ビットずつ 4 つのグループに分け、各 6 ビット値(0~63)で 1 文字を選びます。0~25 は A-Z、26~51 は a-z、52~61 は 0-9、残りの 2 つは + と / です。3 バイトの入力から 4 文字が出力されるため、Base64 は元のデータより約 33% 大きくなります。

Text     M        a        n
Bytes    77       97       110
Bits     01001101 01100001 01101110
6-bit    010011 010110 000101 101110
Index    19     22     5      46
Base64   T      W      F      u

パディングと出力の長さ

入力の長さが 3 の倍数でない場合、最後のグループは不完全になります。余りが 1 バイトなら 2 文字の後に == が付き、2 バイトなら 3 文字と = 1 つになります。したがって、n バイトの入力に対するパディング付きの出力は、常に 4 × ceil(n / 3) 文字になります。

パディング自体にはデータが含まれません。JSON Web Token、URL パラメーター、多くの API ではパディングを省略するため、受信側がパディングなしの出力を想定している場合は「パディング」をオフにしてください。リンクやファイル名に使う場合は、「種類」で URL セーフを選ぶか、+ と / を - と _ に置き換える Base64URL のページを使用してください。

MIME と PEM の折り返し

デフォルトでは出力は 1 行の長い文字列になります。JSON、data URI、HTTP ヘッダーではこの形式が必要です。一方、次の 2 つの形式では改行が必要です。

  • MIME(76 文字)。Content-Transfer-Encoding: base64 で送信するメールの添付ファイルでは、1 行が 76 文字を超えてはいけません(RFC 2045)。このオプションでは、MIME の要件どおり CRLF で改行します。
  • PEM(64 文字)。-----BEGIN 行と -----END 行の間にある証明書や鍵は、1 行 64 文字で記述されます(RFC 7468)。このオプションでは LF で改行します。

文字コードとファイル

Base64 がエンコードするのは文字ではなくバイトです。そのため、テキストはまず文字コードに従ってバイト列に変換されます。たとえば文字 é は UTF-8 では 2 バイトですが、ISO-8859-1 や Windows-1252 では 1 バイトなので、同じテキストでも異なる Base64 になります。Web、JSON、ほぼすべての最新の API では UTF-8 が適切です。GBK、Shift_JIS、Windows-1251 などの文字コードは、古いシステムに合わせる場合にのみ選択してください。

ファイルは保存されている内容そのままにエンコードされ、文字コードの変換は行われません。画像を HTML や CSS のスニペット付きで変換するには画像を Base64 に変換を、MIME タイプを自動判別した data URI が必要な場合はファイルを Base64 に変換を使用してください。

仕様

使用文字A-Z a-z 0-9 + /
出力サイズ3 バイトごとに 4 文字(約 133%)
パディング= で 4 文字の倍数に揃える
規格RFC 4648 第 4 節
大文字と小文字の区別あり

エンコード例

入力 (UTF-8)出力
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

よくある質問

ほかのエンコーダーと Base64 の出力が異なるのはなぜですか?
ほとんどの場合、入力のバイト列が異なることが原因です。よくある原因は、末尾の改行(シェルの echo コマンドは改行を追加するため、printf '%s' または echo -n を使用してください)、文字コードの違い、テキスト内の Windows 形式の改行、パディング・アルファベット・折り返しの設定の違いです。同じバイト列を同じオプションでエンコードすれば、出力は必ず同じになります。
JavaScript で Unicode テキストを Base64 エンコードするにはどうすればよいですか?
btoa() は U+00FF までの文字しか受け付けず、それ以外の文字があるとエラーになります。先に文字列を UTF-8 のバイト列に変換してください。たとえば btoa(String.fromCharCode(...new TextEncoder().encode(str))) のように記述します。Node.js では Buffer.from(str, 'utf8').toString('base64') を使用します。
コマンドラインで Base64 エンコードするにはどうすればよいですか?
Linux や macOS では printf '%s' 'your text' | base64 を実行します。GNU の base64 はデフォルトで出力を 76 文字で折り返し(1 行で出力するには -w 0 を追加)、openssl base64 は 64 文字で折り返します(1 行にするには -A を追加)。
Base64 エンコードは暗号化の一種ですか?
いいえ。Base64 には鍵がなく、Base64 デコーダーを使えば誰でも元に戻せます。テキストしか扱えない経路でバイナリデータを送るための仕組みであり、情報を隠すためのものではありません。
Base64 にするとデータはどのくらい大きくなりますか?

3 バイトごとに 4 文字になり、端数は 1 グループ分に切り上げられるため、出力は約 33% 大きくなります。MIME 形式で折り返すと、76 文字ごとにさらに 2 バイト(CRLF)が加わります。