Base64 をひと言でいうと
Base64 は RFC 4648 で定義されたバイナリ→テキスト変換方式で、データの 3 バイトごとを、A–Z、a–z、0–9、+、/ からなるアルファベットの 4 文字で表します。
Base64 が必要とされる理由
メール(SMTP)、JSON、XML、HTML 属性、URL、ターミナルなど、多くのシステムはテキスト専用に設計されています。画像や PDF のような生のバイナリデータには、こうしたシステムで書き換えられたり拒否されたりするバイトが含まれることがあります。Base64 はデータを安全な印字可能文字に変換するため、途中で壊れることなく届けられます。
Base64 エンコードの仕組み(ステップごとに解説)
- 入力バイトを用意します:
M、a、n= 77、97、110。 - これを 24 ビットで書き表します:
01001101 01100001 01101110。 - ビット列を 6 ビットずつ 4 つのグループに分けます:
010011 010110 000101 101110= 19、22、5、46。 - それぞれの数値をアルファベット表で引きます:19 =
T、22 =W、5 =F、46 =u。
こうして Man は TWFu になります。デコードは、この手順を逆にたどるだけです。
Base64 のアルファベット表
| 値 | 文字 |
|---|---|
| 0–25 | A–Z |
| 26–51 | a–z |
| 52–61 | 0–9 |
| 62 | +(URL セーフ:-) |
| 63 | /(URL セーフ:_) |
| パディング | = |
= パディングの意味
入力の長さが 3 の倍数でない場合、最後のグループは埋め合わされ、= で示されます。たとえば Ma は TWE=、M は TQ== になります。正しい Base64 文字列では、パディングが途中に現れることはありません。
Base64 の種類
- 標準 Base64(RFC 4648):上記のアルファベットと
=パディングを使う形式。 - Base64URL:
-と_を使い、パディングを省略することが多い形式。URL、ファイル名、JWT で使われます。 - MIME Base64:標準のアルファベットに 76 文字ごとの改行を加えた形式。メールで使われます。
Base64 は暗号化ではない
Base64 は何も隠しません。誰でもすぐにデコードできます。出力がランダムな文字列に見えるため、保護の手段と誤解されがちです。機密情報には AES などの本物の暗号化を使い、Base64 は暗号化したバイト列をテキストとして運ぶためだけに使いましょう。
サイズの増加量
n バイトをエンコードした長さは 4 × ⌈n / 3⌉ 文字で、元のデータより約 33% 大きくなります。MIME の改行を入れると、さらに 2〜3% 増えます。
Base64 の主な用途
- メールの添付ファイル(MIME)
- HTML や CSS で画像・フォントを埋め込む Data URI
- JSON や XML の API におけるバイナリフィールド
- JSON Web Token と OAuth
- HTTP Basic 認証のヘッダー
- PEM 証明書と SSH 鍵
- Kubernetes の Secret や設定ファイル
よくある質問
Base64 は暗号化やハッシュと同じですか?
いいえ。暗号化は元に戻すのに鍵が必要で、ハッシュは元に戻すことがまったくできません。一方、Base64 は誰でもデコードできます。
なぜ Base64 という名前なのですか?
64 文字からなるアルファベットを使い、1 文字で 6 ビットの情報を表すからです(26 = 64)。
文字列が Base64 かどうかを見分けるには?
A–Z、a–z、0–9、+、/(または - と _)だけで構成され、長さが通常 4 の倍数で、末尾に = が 1 つか 2 つ付くことがあります。いちばん手早いのは、当サイトのデコーダーに貼り付けて確かめる方法です。
最終更新日: