
え~!! 忘れちゃったの~。
もういちど、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エンコードについては、前回勉強したよね。