字符編碼_Base64編碼原理



原帖出處: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的倍數,因此需要填充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章