本日は、Base64について見ていきたいと思います。
Base64とは
base64とは、64進数を意味する言葉で、コンピュータ分野で使われるBase64は実行ファイルや圧縮ファイルのような8bitのバイナリデータを文字コードに影響を受けない共通ASCII領域の文字だけで成り立ってる文字列に変換するエンコード方式です
(URLや正規表現のなかでbase64を用いると一部の記号(+,/)は特別な意味を持つことがあるので-や_などが用いられることがあります)
エンコードとは
ファイルに保存されている情報の形態や形式をデータ標準化やセキュリティ、処理速度の向上、サイズの節約のたに他の形態に変換する処理または処理方式のことです。
ここで64個の文字は以下となります。
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= "
最後の「=」はパディングという文字です。データ長を揃えるために使用されます。
Base64のエンコード
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= "
上記の文字列を64個の文字に表現するためには6bit(0~63まで64個:2^6=64)が必要です。つまり、2進数を64進数に変換すると考えればいいです。
でも、コンピュータデータやASCII文字などは8bitです。Base64のエンコードをするためには文字列をバイナリデータを6bitずつ括らなければなりません。
6と8のlcm(最小公倍数)、つまり24bitずつ切って括るように決めたのです。

上記の「Man」をBase64エンコードしたら以下の順次になります。
文字列> ASCII binary > 6bitに切り取る > base64 encoding
Man > 77 97 110 > 01001101 01100001 01101110 > TWFu
Base64を使う理由
HTMLまたはEmailのような文字のためのMediaにバイナリデータを含める必要があるときにバイナリデータがシステム独立的に同一に転送または保存されることを保証するために使用されます。
- 通信時にバイナリデータの損失を防ぐために使用
代表的な問題点
- ASCIIは7bitエンコーディングですが、残り1bitを処理する方式がシステムによって違う。
- 一部の制御文字の場合、システムによって異なるコード値を持つ。
- ASCIIはシステムごとにデータを転送するには必ず安全なわけではない。
参考
https://ym1085.github.io/etc/Base64/
