Base64 とは
Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。 MIMEによって規定されていて、7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。
具体的には、A–Z, a–z, 0–9 までの62文字と、記号2つ (+, /)、さらにパディング(余った部分を詰める)のための記号として = が用いられる。 この変換によって、データ量は4/3(約133%)になる。 また、MIMEの基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れるとデータ量は約137%となる。
例) 「べーすろくじゅうよん」 → 「44G544O844GZ44KN44GP44GY44KF44GG44KI44KT」
Base64 変換をするには
phpでは、base64_encode('文字列')、base64_decode('文字列') という関数が用意されていて、簡単に変換することができる。
Base64 の利用例
Basic認証
HTTPヘッダでは、特殊記号を使用することが出来ないため、ユーザー名とパスワードをコロン (:) で区切ってBase64エンコードした文字列がBasic認証に用いられている。
Data URL
dataというURLスキームのひとつ。
画像などのバイナリをbase64エンコードを利用してテキストで表現できる。
References
- Base64 Specification, RFC 4648
- Base64 wikipedia page
- PHP Base64 Documentation
- Perl Base64 Documentation
- Javascript Base64 Documentation
- Java = 1.8 Base64 Documentation
- Java < 1.8 Base64, Apache Common Codec
- Python Base64 Documentation
- Ruby Base64 Documentation
変換形式
Base64変換の手順を以下に挙げる。
- 元データを6ビットずつに分割。(6ビットに満たない分は0を追加して6ビットにする)
- 各6ビットの値を変換表を使って4文字ずつ変換。(4文字に満たない分は = 記号を追加して4文字にする)
変換例
- 元データ
- 文字列: "ABCDEFG"
- 16進表現: 41, 42, 43, 44, 45, 46, 47
- 2進表現: 0100 0001, 0100 0010, 0100 0011, 0100 0100, 0100 0101, 0100 0110, 0100 0111
- 6ビットずつに分割
- 010000 010100 001001 000011 010001 000100 010101 000110 010001 11
- 2ビット余るので、4ビット分0を追加して6ビットにする
- 010000 010100 001001 000011 010001 000100 010101 000110 010001 110000
- 変換表により、4文字ずつ変換
- "QUJD", "REVG", "Rw"
- 2文字余るので、2文字分 = 記号を追加して4文字にする
- "QUJD", "REVG", "Rw=="
- Base64文字列
- "QUJDREVGRw=="
変換表
10進 | 2進 | 文字 | 10進 | 2進 | 文字 | 10進 | 2進 | 文字 | 10進 | 2進 | 文字 | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 000000 | A | 16 | 010000 | Q | 32 | 100000 | g | 48 | 110000 | w | |||
1 | 000001 | B | 17 | 010001 | R | 33 | 100001 | h | 49 | 110001 | x | |||
2 | 000010 | C | 18 | 010010 | S | 34 | 100010 | i | 50 | 110010 | y | |||
3 | 000011 | D | 19 | 010011 | T | 35 | 100011 | j | 51 | 110011 | z | |||
4 | 000100 | E | 20 | 010100 | U | 36 | 100100 | k | 52 | 110100 | 0 | |||
5 | 000101 | F | 21 | 010101 | V | 37 | 100101 | l | 53 | 110101 | 1 | |||
6 | 000110 | G | 22 | 010110 | W | 38 | 100110 | m | 54 | 110110 | 2 | |||
7 | 000111 | H | 23 | 010111 | X | 39 | 100111 | n | 55 | 110111 | 3 | |||
8 | 001000 | I | 24 | 011000 | Y | 40 | 101000 | o | 56 | 111000 | 4 | |||
9 | 001001 | J | 25 | 011001 | Z | 41 | 101001 | p | 57 | 111001 | 5 | |||
10 | 001010 | K | 26 | 011010 | a | 42 | 101010 | q | 58 | 111010 | 6 | |||
11 | 001011 | L | 27 | 011011 | b | 43 | 101011 | r | 59 | 111011 | 7 | |||
12 | 001100 | M | 28 | 011100 | c | 44 | 101100 | s | 60 | 111100 | 8 | |||
13 | 001101 | N | 29 | 011101 | d | 45 | 101101 | t | 61 | 111101 | 9 | |||
14 | 001110 | O | 30 | 011110 | e | 46 | 101110 | u | 62 | 111110 | + | |||
15 | 001111 | P | 31 | 011111 | f | 47 | 101111 | v | 63 | 111111 | / |
Base64エンコード、デコード
➔ 文字列をエンコードする ➔ ファイルをエンコードする ➔ 文字列をデコードして文字列、ファイルにする
ja | about Base64 | comments | en