😽

Base64についてまとめてみた

2024/07/17に公開

Base64とは

Base64は、バイナリデータをテキスト形式に変換するエンコーディング方式の1つです。
これを使用すると、画像やファイルのようなバイナリデータをメールやURLの中に埋め込むことができます。

Base64の仕組み

バイナリデータは0と1のビット列で表現されますが、Base64はこのビット列を6ビットずつのグループにわけ、
それぞれ64種類の文字列にマッピングします。64種類の文字は、以下の64文字から構成されます。

 A-Z (26文字)
 A-z (26文字)
 0-9 (10文字)
 + /   (2文字)

エンコードの流れ

1. バイナリデータを取得する

例えば、バイナリデータが「01001000 01100101 01101100 01101100 01101111」というビット列だったとします(これは「Hello」という文字列のバイナリ表現です)。

2. ビット列を6ビットごとに分割する

このビット列を6ビットずつに分けます。

010010 000110 010101 101100 011011 000011

3. 各6ビットをBase64文字に変換する

それぞれの6ビットを対応するBase64文字に変換します。

010010 -> S
000110 -> G
010101 -> V
101100 -> s
011011 -> b
000011 -> D

したがって、「Hello」は「SGVsbG8」となります。

パディング

バイナリデータの長さが3バイト(24ビット)の倍数でない場合、最後のビット列は6ビットに満たないことがあります。その場合、パディングとして「=」を追加します。
例えば、バイナリデータが「Hi」(「01001000 01101001」)の場合、8ビットが2つ(16ビット) なので、以下のようにパディングを行います。

010010 000110 101000 00
SGVp==

デコード

デコードは、Base64でエンコードされた文字列を元のバイナリデータに戻すプロセスのことです。
64種類のBase64文字をビット列に変換し、それを元のバイナリデータに結合します。

なぜBase64が必要?

Base64が使用される一つに電子メールがあります。
電子メールは、SMTPと呼ばれるプロトコルを使用してテキストデータで送信します。
ところが、このSMTPプロトコルは、ASCIIといわれる7bitで表現される英数字しか送ることができません。
そのため、画像やファイルのデータを電子メールで送信したいと思っても、英数字にしか対応してないSMTPでは、データを送受信することができません。

そこで、全てのデータを英数字で表現するMIME(Multipurpose Internet Mail Extensions)と呼ばれる規格が登場し、その中でbase64というデータの変換方法が定められました。これにより、送信側と受信側でMIMEの規格に則ってエンコード・デコードすることでメールを通して画像やファイルなどの送受信が可能となります。

Base64を使用するユースケース

1. テキストデータとしての送受信

先ほど例に挙げた電子メールがあります。電子メールは基本的にテキストデータで送信されます。しかし、画像やファイルなどのバイナリデータをメールで送る必要がある場合、Base64を使ってそれらをテキスト形式に変換します。これにより、メールサーバーやクライアントがデータを正しく処理できます。

2. URLエンコード

URLは特定の文字セットしかサポートしていません。Base64エンコーディングを使用することで、画像やファイルのデータを安全にURLの一部として含めることができます。
例えば、データURIスキーム(data/png;base64,...)を使って画像データをHTML内に直接埋め込むことができます。

3. Web開発

JSONやXMLなどのフォーマットでバイナリデータをやり取りする際、Base64エンコーディングが使われます。
これにより、データがテキスト形式で表現されるため、解析やデータ交換が容易になります。

4. ストレージとデータベース

一部のデータベースやファイルシステムでは、バイナリデータの扱いが難しい場合があります。Base64エンコーディングを使うことで、バイナリデータをテキスト形式で保存することが可能になります。

5. セキュリティ

一部の通信プロトコルでは、バイナリデータが誤って解釈される可能性があります。Base64を使うことで、データが変更されずに伝送されることを保証できます。

6. デバッグとロギング

Base64エンコードされたデータは人間が読んで理解するのは難しいですが、テキストとして扱えるため、デバッグやログに記録する際に便利です。バイナリデータのままではなく、テキスト形式で保存されるため、後で確認する際に役立ちます。

まとめ

Base64は、バイナリデータをテキストデータとして扱うための便利な方法です。これにより、様々なプロトコルやシステム間でデータを安全かつ確実にやり取りすることができます。特に、電子メール、Web開発、データベース管理など、多くの分野で広く利用されています。

Discussion