原帖出處:http://blog.csdn.net/yu_yuan_1314/article/details/12185149
一、Base64編碼原理
1、Base64編碼原理簡單介紹
Base64要求把每三個8Bit的字節轉換爲四個6Bit的字節(3*8 = 4*6 = 24),然後把6Bit再添兩位高位0,組成四個8Bit的字節,也就是說,轉換後的字符串理論上將要比原來的長1/3。編碼原理如下所示:
(1)base64的編碼都是按字符串長度,以每3個8bit的字符爲一組,
(2)然後針對每組,首先獲取每個字符的ASCII編碼,
(3)然後將ASCII編碼轉換成8bit的二進制,得到一組3*8=24bit的字節
(4)然後再將這24bit劃分爲4個6bit的字節,並在每個6bit的字節前面都填兩個高位0,得到4個8bit的字節
(5)然後將這4個8bit的字節轉換成10進制,對照Base64編碼表,得到對應編碼後的字符。
2、Base64編碼表
Base64編碼使用64個明文來編碼任意的二進制文件,它裏面只使用了A-Z,a-z,0-9,+,/這64個字符。編碼裏面還有“=”號,不過等號不屬於編碼字符,而是填充字符。Base64編碼表如下所示:
3、一個簡單的實例
以字符串“Ow!”爲例:
(1)字符串“Ow!”被分拆成3個8位的字節(0x4F、0x77、0x21);
(2)這3個字節構成一個24位的二進制值:01001111 01110111 00100001;
(3)這些位被劃分爲4個6位的序列:010011、110111、011100、100001;
(4)每個6bit的字節前面都填兩個高位0,得到4個8bit的字節:00010011、00110111、00011100、00100001;
(5)這4個8bit的字節對應的10進制的數值分別爲:19、55、28、33,對照Base64編碼表,得到對應編碼後的字符:T、3、c、h。到此編碼結束。
4、Base64編碼填充機制
Base64編碼收到一個8位字節序列,將這個二進制序列劃分成6位的快。二進制序列有時不能正好平分成6位的塊,在這種情況下,就在序列末尾填充零位,使二進制的序列成爲24的倍數(6和8的最小公倍數)。
對已填充的二進制串進行編碼時,任何完全填充(不包含原始數據中位)的6位組都由特殊的第65個字符“=”表示。如果6位組是部分填充的,就將填充位設置爲0。一個實例如下表所示:
“a:a”和“a:aaaa”分別爲3個字節和6個字節,是3的倍數,因此無需填充。“a:aa”和“a:aaa”分別爲4個字節和5個字節,不是3的倍數,因此需要填充。