Base64エンコード — 文字でもファイルでも
文字列やファイルをBase64に変換し、逆に戻すこともできます。日本語もそのまま扱えます。処理はブラウザの中だけで行われます。
Base64は、あらゆるデータを英数字と数個の記号だけで表す書き方です。画像でも実行ファイルでも、64種類の文字の並びに置き換えられます。
必要になるのは、文字しか通らない場所にデータを入れたいときです。メールの添付、JSONの中に画像を埋め込む、設定ファイルに鍵を書く、HTMLに小さな画像を直接書く。どれも「文字なら通る」という前提の仕組みです。
暗号ではありません
Base64は誰でも元に戻せます。鍵も要りません。見た目が読めない文字列になるので暗号だと誤解されがちですが、秘密を守る機能はまったくありません。
パスワードやトークンをBase64にして「隠した」つもりになるのは危険です。設定ファイルに書いた時点で、読める人には読めます。秘密を守る必要があるなら暗号化か、そもそも保存しない設計を選んでください。
正しい使い道は、バイナリを文字として運ぶことだけです。
容量が約33%増えます
Base64は3バイトを4文字で表すので、変換すると約1.33倍になります。100KBの画像は約133KBの文字列です。
だからウェブページに大きな画像をBase64で埋め込むのは得策ではありません。読み込みが遅くなり、ブラウザの画像キャッシュも効かなくなります。埋め込みが有利なのは、1KB程度の小さなアイコンのように、通信の往復を1回減らす効果のほうが大きい場合だけです。
メールの添付ファイルが元より大きくなるのも同じ理由です。添付の上限を計算するときは、この増加分を見込んでください。
使うときのこつ
- •ファイルを読み込ませると、データURL(data: から始まる形)として書き出せます。HTMLやCSSにそのまま貼れます。
- •日本語も扱えます。内部でUTF-8のバイト列に直してから変換します。
- •戻すときに失敗する場合は、途中で改行が入っていたり、末尾の = が欠けていたりします。
- •文字列もファイルもどこにも送信されません。変換はすべてブラウザの中で行われます。
よくある質問
Base64にすれば安全ですか?
安全にはなりません。誰でも元に戻せます。秘密を守る目的には使えません。
末尾の = は何ですか?
3バイト単位に満たなかった分を埋める記号です。データの一部なので、削ると正しく戻せません。
画像をBase64で埋め込むべきですか?
1KB程度の小さなアイコンなら有効です。それ以上は容量が33%増え、キャッシュも効かなくなるため、通常のファイルとして置くほうが速くなります。
大きなファイルでも変換できますか?
できますが、文字列が非常に長くなるとブラウザが重くなります。数MBを超えるファイルは向きません。
