『JavaScriptはたまに使う』程度の筆者による、メモ書き程度の内容です。
Base64とは
任意のデータを64種類の英数字に変換するエンコード方式。
- 取扱いが可能なことが多い
半角英数字(64種)
に変換したうえでデータを扱う
種類 | 例 | 数 |
---|---|---|
小文字 | a~z |
26種 |
大文字 | A~Z |
26種 |
数字 | 0~9 |
10種 |
記号 | + ,/ |
2種 |
合計 | 合計 | 64種 |
その他 | = |
パディング文字 |
特徴
- 文字列型の変数に確認可能
- データサイズは大きくなる
- データ量は4/3(約133%)になる
- MIMEの基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れるとデータ量は約137%となる
具体例
目的 | 電子メールを使って画像データや音声データをやり取りする |
---|---|
制約 | 電子メールのSMTPプロトコルはASCII((7bit)しか送ることができない(MIME) |
手順 | ①送信側があらかじめBase64フォーマット(半角英数字 )に変換する(エンコード)②送信側がSMTPプロトコル上にBase64フォーマットのデータ( 半角英数字 )を格納し転送する③受信側がBase64データをデコードする。 |
目的 | JSONなどで画像データを保存する |
---|---|
制約 | 利用できるデータ形式がString形、倍精度浮動小数点型しかない |
手順 | ①あらかじめBase64フォーマット(半角英数字 )に変換する(エンコード)②JSONのプロパティにBase64フォーマットのデータ( 半角英数字 )を格納する③データを利用する者はプロパティに格納されたBase64データをデコードしたうえで利用する。 |
JavaScriptでBase64を使うとは
- JavaScriptで取り扱いずらい画像データや音声データのようなバイナリデータをJavaScriptで取り扱いやすい「文字列(Base64)」に変換して処理(移動、保存、複製等)をすること。
変換アルゴリズム(→Base64)
// --------------- // 元の文字列 // --------------- "abcdefg" ↓ // --------------- // 手順1. // エンコードしたいバイナリデータを6bitずつ取り出す(足りない分は0を追加する)。 // --------------- 0x61 0x62 0x63 0x64 0x65 0x66 0x67 // (16進数表記) ↓ 01100001 01100010 01100011 01100100 01100101 01100110 01100111 // (2進数表記) ↓ // 6bitずつに分解する(2進数表記) 011000, 010110, 001001,100011, 011001, 000110, 010101, 100110, 011001, 11 ↓ // 6bitに満たない場合は0で埋める 011000, 010110, 001001,100011, 011001, 000110, 010101, 100110, 011001, 110000 ↓ // --------------- // 手順2. // Base64の変換テーブルを用いて`英数字`に変換する // --------------- Y W J j Z G V m Z w ↓ // --------------- // 手順3. // 文字数が4の倍数になるように不足部分に`=`を追加する // --------------- YWJj ZGVm Zw== ↓ // --------------- // 完成:Base64データ(文字列) // --------------- "YWJjZGVmZw=="
base64のビット列と英数字の変換テーブル
10進 | 2進 | 文字 | 10進 | 2進 | 文字 | 10進 | 2進 | 文字 | 10進 | 2進 | 文字 | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 000000 | A | 26 | 011010 | a | 52 | 110100 | 0 | 62 | 111110 | + | |||
1 | 000001 | B | 27 | 011011 | b | 53 | 110101 | 1 | 63 | 111111 | / | |||
2 | 000010 | C | 28 | 011100 | c | 54 | 110110 | 2 | ||||||
3 | 000011 | D | 29 | 011101 | d | 55 | 110111 | 3 | ||||||
4 | 000100 | E | 30 | 011110 | e | 56 | 111000 | 4 | ||||||
5 | 000101 | F | 31 | 011111 | f | 57 | 111001 | 5 | ||||||
6 | 000110 | G | 32 | 100000 | g | 58 | 111010 | 6 | ||||||
7 | 000111 | H | 33 | 100001 | h | 59 | 111011 | 7 | ||||||
8 | 001000 | I | 34 | 100010 | i | 60 | 111100 | 8 | ||||||
9 | 001001 | J | 35 | 100011 | j | 61 | 111101 | 9 | ||||||
10 | 001010 | K | 36 | 100100 | k | |||||||||
11 | 001011 | L | 37 | 100101 | l | |||||||||
12 | 001100 | M | 38 | 100110 | m | |||||||||
13 | 001101 | N | 39 | 100111 | n | |||||||||
14 | 001110 | O | 40 | 101000 | o | |||||||||
15 | 001111 | P | 41 | 101001 | p | |||||||||
16 | 010000 | Q | 42 | 101010 | q | |||||||||
17 | 010001 | R | 43 | 101011 | r | |||||||||
18 | 010010 | S | 44 | 101100 | s | |||||||||
19 | 010011 | T | 45 | 101101 | t | |||||||||
20 | 010100 | U | 46 | 101110 | u | |||||||||
21 | 010101 | V | 47 | 101111 | v | |||||||||
22 | 010110 | W | 48 | 110000 | w | |||||||||
23 | 010111 | X | 49 | 110001 | x | |||||||||
24 | 011000 | Y | 50 | 110010 | y | |||||||||
25 | 011001 | Z | 51 | 110011 | z |