Base64 とは
Base64 は、どんなデータでも64種類の安全な文字だけで書き表す方式です。使う文字は A から Z と a から z のアルファベット、0 から 9 の数字、そして記号の + と / です。メールや一部のWebフォームのように、プレーンテキストしか運べない仕組みのために考えられました。Base64 を使えば、画像も PDF も、日本語のようなどの言語のテキストも、壊れずにそうした仕組みを通過できます。
Base64 はさまざまな場所で使われています。メールの添付ファイル、CSS にデータURLとして埋め込んだ画像、JSON Web Token、API キー、HTTP の Basic 認証ヘッダー、設定ファイルなどです。
Base64 ツールの使い方
テキストをエンコードする。 「テキスト」欄に入力するか貼り付けます。入力に合わせて右側の欄に Base64 が表示されます。「コピー」を押すと取り出せます。
Base64 をデコードする。 右側の「Base64」欄に Base64 を貼り付けます。左側に元のテキストが表示されます。スペース、改行、パディングの欠け、data:...;base64, という接頭辞が含まれていても、そのまま受け付けます。
オプション
- URLセーフ(- と _):
+を-に、/を_に置き換え、=のパディングを削除します。リンク、Cookie、ファイル名に使うときに選びます。 - 76文字で改行:出力を76文字ごとの行に区切ります。メール(MIME)で使われる形式です。
「クリア」を押すと両方の欄が空になります。
ファイルを Base64 に変換。 25 MB までのファイルを選びます。そのままの文字列が欲しい場合は「Base64 のみ」、すぐに使える data:image/png;base64,... 形式が欲しい場合は「データURL」を選び、「コピー」を押してください。
Base64 をファイルに変換。 Base64 またはデータURLを貼り付けます。PNG、JPEG、GIF、WebP、PDF、ZIP などのよく使われる形式は自動で判別され、ファイル名の候補が表示されます。画像ならプレビューも表示されます。「ファイルをダウンロード」を押すと保存できます。
Base64 の仕組み
Base64 は入力を3バイト(24ビット)ずつ読み込みます。その24ビットを6ビットずつ4つのグループに分けます。6ビットのグループはそれぞれ0から63の数値になり、その数値で Base64 の文字表から1文字を選びます。3バイト入れると4文字出てくるわけです。そのため、Base64 の出力は入力よりも約3分の1大きくなります。
テキストはまず UTF-8 でバイトに変換されます。アクセント付きの文字や絵文字、日本語が正しく扱えるのはこのためです。café は5バイトになり、そのバイトがエンコードされます。日本語のひらがなや漢字は1文字が3バイトなので、日本語 は9バイトになり、Base64 では 5pel5pys6Kqe になります。古いツールの中にはブラウザの btoa 関数をそのまま使っているものがあり、Latin-1 の範囲外の文字、つまり日本語などを入れると失敗します。
変換例
| 入力 | Base64 | URLセーフ |
|---|---|---|
M |
TQ== |
TQ |
Ma |
TWE= |
TWE |
Man |
TWFu |
TWFu |
Hello, World! |
SGVsbG8sIFdvcmxkIQ== |
SGVsbG8sIFdvcmxkIQ |
café |
Y2Fmw6k= |
Y2Fmw6k |
Zoë |
Wm/Dqw== |
Wm_Dqw |
<?> |
PD8+ |
PD8- |
最後の2行を見ると、URLセーフ形式が必要な理由がわかります。リンクの中に / や + があるとリンクが壊れることがありますが、_ と - なら問題ありません。
ヒントと制限
- Base64 はセキュリティ対策ではありません。 何も隠せません。Base64 のテキストは元のデータと同じものとして扱ってください。
- エラーメッセージを確認しましょう。
*のような文字を含むものを貼り付けると、どの文字が Base64 として無効なのかを表示します。 - バイナリデータはファイルで扱います。 デコードしたバイトが正しい UTF-8 テキストでない場合は、その旨が表示されます。同じ Base64 を「Base64 からファイルへ」に貼り付けて、ダウンロードしてください。
- サイズが増えます。 3 MB の画像は約 4 MB の Base64 になります。データURLでの埋め込みは小さなアイコンには便利ですが、大きな写真では表示が遅くなります。
- デコード時のパディングは省略可能です。 足りない
=はツールが自動で補います。
そのほかの Base64 エンコード方法
コマンドライン(macOS・Linux)。 echo -n 'Hello, World!' | base64 を実行すると SGVsbG8sIFdvcmxkIQ== と表示されます。デコードには base64 -d(古い macOS では base64 -D)を使います。-n を付け忘れると、末尾の改行までエンコードされてしまいます。
Windows。 certutil -encode input.txt output.txt でファイルをエンコードできます。PowerShell では [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('Hello, World!')) でテキストをエンコードできます。
JavaScript(Node)。 Buffer.from('Hello, World!').toString('base64') は SGVsbG8sIFdvcmxkIQ== を返し、Buffer.from('SGVsbG8=', 'base64').toString() は Hello を返します。
Python。 base64.b64encode('Hello, World!'.encode()).decode() で同じ結果になります。なお base64.urlsafe_b64encode は = のパディングを残すため、Zoë は Wm_Dqw== になります。
関連ツール
テキストをWebアドレスで使える形にするには、URLエンコード・デコードを使ってください。テキストの元になっているバイトを確認したい場合は、16進数テキスト変換やUTF-8 エンコードツールが便利です。