Practical Malware AnalysisのChapter 13に載っていたBase64エンコードの図が視覚的にわかりやすかったので、引用してみました。
Base64エンコード手順の概要 (Wikiより抜粋)
1. 元データを6ビットずつに分割。(6ビットに満たない分は0を追加して6ビットにする)
2. 各6ビットの値を変換表を使って4文字ずつ変換。(4文字に満たない分は = 記号を追加して4文字にする)
以下は"ATT"という文字列をBase64エンコードしたときの流れを表したものです。
1行目: エンコード前の平文
2行目: 平文をHEXエンコードして4ビットずつに分けたもの
>>> binascii.hexlify('A')
'41'
0x41 -> 0x4, 0x1
3行目: 2行目をビットで表したもの
>>> format(4, '04b')
'0100'
>>> format(1, '04b')
'0001'
4行目: 3行目のビット列を6ビットずつに分けて10進数で表したもの
>>> int('010000', 2)
16
5行目: 4行目の値をインデックス番号としてBase64変換表をもとに変換された文字
>>> b64_table ='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
>>> b64_table[16]
'Q'
以上。