Base64
まず、なんとなく分かった気になれる動画を見る What is Base64? external_link
あらゆる文字を変換するための規格のようなものだろうか...?
MDNを見てみる
Base64 のエンコードとデコード external_link
バイナリーからテキストへの符号化を行う手法のグループであり、64 を基数とする表現に変換することで、バイナリーデータを ASCII 文字列で表すことができます。
wikipedia に書かれている利用例1から分かる通り、電子メールでは 7ビット文字列以外をやり取りすることができない2。
そのため、ASCII 文字列に変換する必要がある。その手法の一部が Base64 ?
エンコードとデコード方法3
example.jsvar encodedData = window.btoa("Hello, world"); // 文字列のエンコード var decodedData = window.atob(encodedData); // 文字列のデコード
ASCII 文字
半角の英字(a~z、A~Z)やアラビア数字(0~9)、記号、空白文字、制御文字など128文字が規定されている文字コードの標準規格
利用箇所と例
メールの添付ファイル
- 添付ファイルをつけたときのメール文面はどうなっているか?
Content-Transfer-Encoding: base64
とあるように base64 でエンコードされているようだ
- なぜ base64 エンコードされているのか?
MIMEによってあらゆるデータをテキスト(正確には、英語圏の人間にとってのテキスト)に変換して送受信しようとするのが、インターネットメールの根本的な考え方である。つまり、普段よく利用するインターネットメールへのファイルの添付とは、ファイルをテキスト化する作業のことになる。
Content-Transfer-Encoding: 格納方法
- 7bit
- 8bit
- binary
- quoted-printable
- base64
8 bit と binary は インターネットメールを8ビット・データに対応させるために、8ビットのままで利用するための定義。 厳密にはこの2つの方法は仕様違反
SSL証明書
- 証明書の中身はどうなっているか?
- なぜ base64 エンコードされているのか?
JWT(JSON Web Token)
- JWT を利用したサイトでログイン時にやり取りされる内容はどうなっているか?
- なぜ base64 エンコードされているのか?
SAML
- ログイン時に IdP と SP でやり取りされる内容はどうなっているか?
- なぜ base64 エンコードされているのか?
Kubernetes Secret
- クラスタに対して
create secret
した後に、get secret
するとどうなっているか? - なぜ base64 エンコードされているのか?
Footnotes
-
SMTPが本来テキストベースのプロトコルであり、メッセージやメールデータが 7ビットASCLL でなければならないという制限があった。
が電子メールに MIME(Multipurpose Internet Mail Extension) という規格がつくられ、SMTP自体にも8ビットで伝送する拡張が標準化された。 ↩ -
https://developer.mozilla.org/ja/docs/Web/API/WindowBase64/btoa external_link ↩