BASE64について

Base64について

Base64とは

Base64は、通信などのマルチバイト文字やバイナリデータを扱えない環境において、印字可能文字列に変換するエンコーディング法です。

メールなどで画像や音声ファイルなどのバイナリデータを送信する際に、中身をテキストデータに置換することに用いられます。


印字可能文字列とは

印字可能文字列とは、ASCII文字のうちの65文字([A-Za-z0-9+/]の64文字と'=')と定義されています。

なお、この変換によってデータ量は4/3(約133%)になります。

また、MIMEの基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れるとデータ量は約137%となります。


BASE64変換処理

文字列「abcd」をBASE64エンコードする例を記載します。


1, 対象データを16進法に変換します。


0x61 0x62 0x63 0x64

2, 2進数に変換します。


0110 0001 0110 0010 0110 0011 0110 0100

3, 6bitに区切る。(余った分には0パディングを行う)


011000 010110 001001 100011 011001 000000

4, BASE64変換表を基に、4文字ずつ変換する。(4文字に満たない場合には「=」パディングする)


24 22 9 35 25 0
Y W J j Z A = =

以上の操作により、文字列「abcd」をBASE64エンコードしたデータ「YWJjZA==」が生成できました。


BASE64変換表

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 /


rubyでのBASE64エンコード方法

Ruby言語ではBASE64を扱うための機能(ライブラリ)が標準で用意されています。

下記のようにメソッドを呼び出すだけで、BASE64の変換が容易に行えます。


require 'base64'
p Base64.b64encode("日本語")      # => "xvzL3Ljs\n"
p Base64.decode64('xvzL3Ljs')    # => "日本語"