<div class="alert-warning p-3">
  Base64を勉強する過程のメモ
</div>

# Base64

まず、なんとなく分かった気になれる動画を見る **[What is Base64?](https://www.youtube.com/watch?v=8qkxeZmKmOY)**  
あらゆる文字を変換するための規格のようなものだろうか...?

## MDNを見てみる

[Base64 のエンコードとデコード](https://developer.mozilla.org/ja/docs/Web/API/WindowBase64/Base64_encoding_and_decoding)

> バイナリーからテキストへの符号化を行う手法のグループであり、64 を基数とする表現に変換することで、バイナリーデータを ASCII 文字列で表すことができます。

wikipedia に書かれている利用例[^1]から分かる通り、電子メールでは 7ビット文字列以外をやり取りすることができない[^2]。  
そのため、ASCII 文字列に変換する必要がある。その手法の一部が Base64 ?

## エンコードとデコード方法[^3]

```js:example.js 

var encodedData = window.btoa("Hello, world");	// 文字列のエンコード
var decodedData = window.atob(encodedData);		// 文字列のデコード
```

## ASCII 文字
半角の英字（a～z、A～Z）やアラビア数字（0～9）、記号、空白文字、制御文字など128文字が規定されている文字コードの標準規格


[^1]: https://ja.wikipedia.org/wiki/Base64
[^2]: SMTPが本来テキストベースのプロトコルであり、メッセージやメールデータが 7ビットASCLL でなければならないという制限があった。  
が電子メールに MIME(Multipurpose Internet Mail Extension) という規格がつくられ、SMTP自体にも8ビットで伝送する拡張が標準化された。
[^3]:https://developer.mozilla.org/ja/docs/Web/API/WindowBase64/btoa

## 利用箇所と例
### メールの添付ファイル
- 添付ファイルをつけたときのメール文面はどうなっているか？

![スクリーンショット 2020-04-22 9.16.27.png](/attachment/5e9f8d1a78a8ed004927e49a)
`Content-Transfer-Encoding: base64` とあるように base64 でエンコードされているようだ

- なぜ base64 エンコードされているのか？

[ルールで決まっているらしい](https://www.atmarkit.co.jp/ait/articles/0104/10/news002.html)

> 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 エンコードされているのか？


---

## Page Navigation

- Canonical URL: https://tips.weseek.co.jp/Tips/Base64と仲良くなる
- Permalink: https://tips.weseek.co.jp/5e9309f511007300489677f8
- Parent: [Tips](/5e44f1546857420048c06de8.md)
- Children: 0 total
- Total descendants: 0
- Siblings: 49 of 71 total (22 more not shown; see the page list API below for the full listing)
  - [Admin.js](/6505e03558d21abbb3ac8575.md)
  - [Agile](/5fb747a7a1ba4200489a4a89.md)
  - [Amazon Web Services(AWS)](/5fb748c9a1ba4200489a4acc.md)
  - [Angular](/65069da24603e7ff39a6b3d6.md)
  - [Ansible](/6505dfaa58d21abbb3ac837d.md)
  - [Apache2](/65069da24603e7ff39a6b3d5.md)
  - [BuildKitによりDockerとDocker Composeで外部キャッシュを使った効率的なビルドをする方法](/5e67aea878bd2f0048680af1.md)
  - [CSS](/5fb74873a1ba4200489a4abb.md)
  - [Cocos-creator](/5fb74b6aa1ba4200489a4b2e.md)
  - [GROWI開発の知見でLINE_bot作ってみた](/5fd1d3fa0899d80049ff9a1c.md)
  - [Git](/5fb748dfa1ba4200489a4ad7.md)
  - [Grails](/65069da24603e7ff39a6b3f0.md)
  - [Hyperledger fabric](/5fcb12a2550066004845743c.md)
  - [Java](/5fb74daba1ba4200489a4ba8.md)
  - [JavaScript](/5fb74e7aa1ba4200489a4bd1.md)
  - [Jenkins](/5fb74feba1ba4200489a4c17.md)
  - [KVM](/5fbdbc17daa51800482d2227.md)
  - [Keycloak](/5fbdbffcdaa51800482d22b3.md)
  - [Kubernetes](/600522a79662740048b34bb5.md)
  - [Let's Encrypt](/65069da24603e7ff39a6b3d8.md)
  - [Linux](/5fc0ae238b05ce0048ff5a31.md)
  - [MongoDB](/5fc0af488b05ce0048ff5a6b.md)
  - [Mutagen](/6505de1458d21abbb3ac7ecd.md)
  - [Node.js](/60a62549a0d804004912d94b.md)
  - [OpenLDAP](/5fcda4862553a0004852b0dd.md)
  - [Prometheus](/5fc0b3058b05ce0048ff5af6.md)
  - [Python](/5fc0b3218b05ce0048ff5b00.md)
  - [RaspberryPiとArduinoで作る360度回転リモートワークカメラ](/5fccce3e3a4fec004844a01b.md)
  - [RaspberryPiとArduinoで作る360度回転リモートワークカメラ_ソフトウェア構築編](/5fdab8ad04dc4f00483b8d20.md)
  - [RaspberryPiとArduinoで作る360度回転リモートワークカメラ_ハードウェア製作編](/5fd7972a5fc9220048844c35.md)
  - [Redmine](/5fcd9bdd2553a0004852b012.md)
  - [Ruby](/5fc0b2588b05ce0048ff5ada.md)
  - [Single Sign On(SSO)](/5e97bf6876311900487c3c55.md)
  - [Slack](/5fc0ae7b8b05ce0048ff5a45.md)
  - [SourceTree](/5fc0ae0c8b05ce0048ff5a2b.md)
  - [StackStorm(st2)](/65069da24603e7ff39a6b3da.md)
  - [Stripe](/5fc0aff58b05ce0048ff5a8d.md)
  - [Tomcat](/5fcda2772553a0004852b0ac.md)
  - [Turborepo](/6505dee958d21abbb3ac80cf.md)
  - [TypeScript](/5fc0a7ac8b05ce0048ff58f4.md)
  - [URLでベーシック認証を突破](/5fc0b2d98b05ce0048ff5af2.md)
  - [Unity](/5fc0ace98b05ce0048ff59f5.md)
  - [VSCode](/5e9b270093fd090048cc8acb.md)
  - [WSL2](/65069da24603e7ff39a6b403.md)
  - [Wordpress](/5fc0af488b05ce0048ff5a6d.md)
  - [XSS](/5fbe723e36ac6300497c2194.md)
  - [brigade](/600523119662740048b34be0.md)
  - [cert-manager](/65069da24603e7ff39a6b3f9.md)
  - [devcontainer](/5fd54b8eedce4f00482fa36d.md)
- Last updated: 2020-04-22T00:33:31.659Z by deleted_at_1672138397219
- Full page listing (all children regardless of count): https://tips.weseek.co.jp/_api/v3/page-listing/children?id=5e9309f511007300489677f8
