え~!! 忘れちゃったの~。
もういちど、Base64エンコードのページを読み直して、理解してきてほしいなぁ。
それでは、Base64デコードについて説明するね。
Base64デコードは、Base64エンコードと逆の事を行います。Base64で印刷可能な文字列に変換されていたデータを元のバイナリデータに戻します。
エンコードでは、6bitで区切ったデータを4文字分の文字列に変換していましたので、デコードでは4文字ずつ取得して、1文字ずつ 6bitのデータに変換してつなげていきます。
それではBase64にエンコードされた "aGVsbG8=" をデーコードしていきます。
4文字ずつ文字をデータに変換していきます。変換に使用するテーブルは、Base64エンコードで解説しているのでそちらを参照してね。
文字列 | 値(16進数) | 値(2進数) |
---|---|---|
a | 0x1a | 011010 |
G | 0x06 | 000110 |
V | 0x15 | 010101 |
s | 0x1c | 101100 |
文字列 | 値(16進数) | 値(2進数) |
---|---|---|
b | 0x1b | 011011 |
G | 0x06 | 000110 |
8 | 0x3c | 1111xx |
= | ---- | xxxxxx |
'='以外の全てのデータを連結すると以下のデータになります。 0110100001100101011011000110110001101111xx
このデータを8bit毎に区切ります。
区切ったデータ(2進) | 値(16進数) | Shift-JISコード |
---|---|---|
01101000 | 0x68 | h |
01100101 | 0x65 | e |
01101100 | 0x6C | l |
01101100 | 0x6C | l |
01101111 | 0x6F | o |
xx | ---- | 8bitに満たないものは無視 |
ここで8bitに満たなかったデータは、エンコードの際に追加されたデータの'0'なので捨ててしまいます。
最後に8bit毎に区切ったデータを連結すれば、0x68, 0x65, 0x6c, 0x6c, 0x6fの元データ"hello"に戻ります。
"aGVsbG8="がbase64デコードされると、"hello"になる仕組みが理解できましたか?
え~解らなかったの~!?
ごめんね~解らなかったら、もう一度、読み直してみてね!!。
Base64エンコードについては、前回勉強したよね。