プロ生ちゃんとお勉強するよ~

プロ生ちゃんと一緒にプログラミングをお勉強できるサイトです。

Base64エンコード

Base64は、データを64種類の印刷可能な英数字のみで表現するデータだよ。 7bitのデータしか扱うことのできない電子メールなどに使われているんだよ。 "QkFTRTY0pMvK0bS5pLmk66ToPw==" こんな感じのデータです。見たことあるかなぁ?

必ずある訳ではないのだけど、最後に'='が何個かついているのが特徴だよ!!

印刷可能な文字だけで構成されるので、文字列として取り扱う事ができます。 連結したりするのにも通常の文字列系の関数などが利用できます。

実際に使用される文字は"0~9"の10文字、"a~z"の26文字、"A~Z"の26文字、"+/"の2文字の計64種類の文字でデータを表します。 最後にデータ無しを表す'='が含まれる場合がありますので、 実質的には65文字を利用します。

データの変換の方法は、 データを6bitずつ区切って24ビット毎に4文字に変換していって、最後の6bitに満たない部分は0で埋めます。 最終的に、データが4文字に満たなかった部分は'='を追加します。

データを6bit毎に区切ると、6bitで表せる数値は、0x00~0x3fの64種類になります。 6bit毎に区切った0x00から0x3fの数値を文字列に変換します。

文字 変換する値(16進) 文字 変換する値(16進)
A 0x00 g 0x20
B 0x01 h 0x21
C 0x02 i 0x22
D 0x03 j 0x23
E 0x04 k 0x24
F 0x05 l 0x25
G 0x06 m 0x26
H 0x07 n 0x27
I 0x08 o 0x28
J 0x09 p 0x29
K 0x0a q 0x2a
L 0x0b r 0x2b
M 0x0c s 0x2c
N 0x0d t 0x2d
O 0x0e u 0x2e
P 0x0f v 0x2f
Q 0x10 w 0x30
R 0x11 x 0x31
S 0x12 y 0x32
T 0x13 z 0x33
U 0x14 0 0x34
V 0x15 1 0x35
W 0x16 2 0x36
X 0x17 3 0x37
Y 0x18 4 0x38
Z 0x19 5 0x39
a 0x1a 6 0x3a
b 0x1b 7 0x3b
c 0x1c 8 0x3c
d 0x1d 9 0x3d
e 0x1e + 0x3e
f 0x1f / 0x3f

Shift-JISコードの"hello"をでBase64にエンコードすると、こんな感じの文字列になるよ。最後の'='は 変換の際に4文字に満たなくて追加されたデータ無しを表すパディングだよ。 "aGVsbG8="

では、実際に"hello"をBase64にエンコードしてみるね!!。

Shift-JISコードの"hello"をバイナリデータに変換すると、以下のようになります。

文字 バイナリデータ(16進) バイナリデータ(2進)
h 0x68 01101000
e 0x65 01100101
l 0x6C 01101100
l 0x6C 01101100
o 0x6F 01101111

そして、2進数をつなげると 0110100001100101011011000110110001101111 となります。

この値を6bit毎に区切ってさきほどのテープルに照らし合わせて4文字ずつ変換します。

6bitに区切ったデータ 値(16進数) 変換した文字列
011010 0x1a a
000110 0x06 G
010101 0x15 V
101100 0x1c s
6bitに区切ったデータ 値(16進数) 変換した文字列
011011 0x1b b
000110 0x06 G
1111xx 0x3c 8
xxxxxx ---- =

'x'の部分は0として扱います。変換元のデータ6bitに満たないまたは、4文字に満たない為に追加しています。

"hello"がbase64にエンコードされると、"aGVsbG8="になる仕組みが理解できましたか?

え~解らなかったの~!?

ごめんね~解らなかったら、もう一度、読み直してみてね!!。

注意!! Base64はデータ形式が文字列なので、そのままURLのクエリに使えそうなイメージがありますが、 "+/="が利用されているので、そのままURLのクエリに使用すると"+/="が、区切り文字として扱われてしまうので、 そのままURLのクエリとして使用しないでね。 クエリとして使用する場合は、さらにURLエンコードをしてから使用してね。

本キャラクターに関する著作権およびその他一切の権利は、プログラミング生放送および、それらの関連企業・関係者に帰属しています。これは、著作権およびその他一切の権利を放棄・譲渡するものではありません。







プロ生ちゃんとお勉強するよ~

プロ生ちゃんと一緒にプログラミングをお勉強できるサイトです。