【べーすろくじゅうし】

Base64 とは?

最終更新:
💡 バイナリをテキストとして扱える形に変換する

バイナリデータを64種類の文字で表すエンコード方式。テキストとして扱える形に変換する。末尾に補完用の「=」が付く場合がある。暗号化ではない。

📌 このページのポイント
Base64:3バイトを4文字に Man 3バイト 変換 TWFu 4文字 24ビットを6ビットずつ4組に分ける 19 → T / 22 → W / 5 → F / 46 → u 端数は「=」で補完する場合がある 暗号化ではない
ASCIIの「Man」を通常のBase64で表した例。補完用の「=」は64種類の文字とは別の役割。
ひよこ ひよこ
何のために使うの?
ペンギン先生 ペンギン先生
バイナリデータをテキストで扱うためだよ。例えばMIMEで使われるメールの添付データや、JWTの表現に関係する。変換によって送信先の形式に合わせるのであって、内容を秘密にする仕組みではないんだ。
ひよこ ひよこ
どうやって文字にするの?
ペンギン先生 ペンギン先生
3バイトは24ビット。その並びを6ビットずつ4組に分け、それぞれを文字に置き換えるよ。図の例ではASCIIの「Man」の3バイトを「TWFu」の4文字にするんだ。
ひよこ ひよこ
必ず約1.33倍になる?
ペンギン先生 ペンギン先生
端数のない3バイトなら4文字になるよ。通常の補完付き形式では、1バイトでも2バイトでも4文字になる。だから十分長いデータでは約4/3と考えられるけれど、短いデータに同じ比率をそのまま当てはめないでね。
ひよこ ひよこ
Base64なら秘密の情報を守れる?
ペンギン先生 ペンギン先生
守れないよ。対応する方式でデコードすれば元のデータを取り出せる。見慣れない文字列になっても暗号化とは違うから、機密性を保つには別の仕組みが必要なんだ。
ひよこ ひよこ
JWTには同じBase64を使うの?
ペンギン先生 ペンギン先生
JWTではBase64URLを使うよ。通常の「+」「/」を「-」「_」に変え、JWTでは末尾の補完文字を省く。JWTには署名付きの表現と暗号化された表現があるので、「JWTは全部3パーツで、内容が必ず読める」とは言えないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Base64」って出てきたら「バイナリをテキストとして扱える形に変換する」と思えばだいたいOK!
📖 おまけ:英語の意味
「Base64」 = 64種類の文字を使うエンコード
💬 64種類の文字にそれぞれ6ビットの値を割り当てる方式だよ。補完用の「=」は、その64文字とは別の役割なんだ。

参考資料

← 用語集にもどる