Base32編碼轉換

在網絡傳入字符串過程中,如果編碼方式是基於ASCII,那麼會造成什麼問題?比如:url地址中存在"/"(如:www.csdn.net/nav/ai),字符串中編碼中也存在"/",這樣就會出現錯誤地址解析.爲了防止這種情況的出現,出現了Base16,Base32,Base64編碼方式.我們知道計算機傳輸的單位是字節,也就是8個比特位,按照一個字節編碼的方式結果就有256種狀態(每個比特位0或者1兩種狀態,8位就是2^{8}=256),ASCII編碼是將8個比特位中最高位置爲0,所以總共可表示128個字符(即2^{7}=128).爲了避免衝突,去掉一些特殊字符,重新編碼.例如Base16編碼,編碼後的字符只會在(0~9,A~F)中,Base32編碼後字符就會在(A~Z, 2~7)中以及填充符"="中出現.

Base16編碼

Base16編碼就是將ASCII字符集中可打印的字符(數字0~9和字母A~F)對應的二進制字節數據進行編碼,編碼的方式:

1.將數據(根據ASCII編碼,UTF-8編碼等)轉成對應的二進制數,不足8比特位高位補0.然後將所有的二進制全部串起來,4個二進制位爲一組,轉化成對應十進制數.

2.根據十進制數值找到Base16編碼表裏面對應的字符.Base16是4個比特位表示一個字符,所以原始是1個字節(8個比特位)剛好可以分成兩組,也就是說原先如果使用ASCII編碼後的一個字符,現在轉化成兩個字符.數據量是原先的2倍.

                                                                                        Base16編碼表

案例:將"ILU"字符串,根據ASCII編碼得到對應的二進制,將所有二進制串起來,然後按4個二進制位分割,轉化成十進制數值,根據Base16編碼表得到編碼"494C55",編碼後的數據是原先的2倍.

文本

I

L

U

ASCII編碼

73

76

85

二進制位

0

1

0

0

1

0

0

1

0

1

0

0

1

1

0

0

0

1

0

1

0

1

0

1

十進制數值

4

9

4

12

5

5

Base16編碼

4

9

4

C

5

5

Base32編碼

與Base16編碼區別的是,Base32使用了ASCII編碼中可打印的32個字符(大寫字母A~Z和數字2~7)對任意字節數據進行編碼.Base32將串起來的二進制數據按照5個二進制位分爲一組,由於傳輸數據的單位是字節(即8個二進制位).所以分割之前的二進制位數是40的倍數(40是5和8的最小公倍數).如果不足40位,則在編碼後數據補充"=",一個"="相當於一個組(5個二進制位),編碼後的數據是原先的\frac{8}{5}倍.

                                                                                             Base32編碼表

案例:"ILU"字符串根據Base32編碼進行編碼,先根據ASCII編碼得到對應字符編碼值以及對應二進制,將所有二進制串起來,然後按照5個二進制位爲一組分割 ,得到十進制值=>找到Base32編碼表找到對應的字符.案例總共分割成了5組(25位),還差三組(15位).在末尾補充3個"=".經過Base32編碼後最終值應是"JFGFK===".

文本

I

L

U

ASCII編碼

73

76

85

二進制位

0

1

0

0

1

0

0

1

0

1

0

0

1

1

0

0

0

1

0

1

0

1

0

1

十進制數值

9

5

6

5

10

Base32編碼

J

F

G

F

K

Base64編碼

Base64編碼使用了ASCII編碼中64個可打印的字符(大寫字母A~Z,小寫字母a~z,數字0~9以及"+","/")將任意字節數據進行編碼.Base64編碼將串起來的二進制以6位進行分割.所以分切之前的二進制位數應該是24的倍數(即6,8的最小公倍數).如果不足24位,則在編碼後數據後面添加"=",一個"="想當於6個二進制位.數據量是原先的\frac{4}{3}倍.

                                                                                           Base64編碼表

案例:"ILU"字符串編碼,前面的過程與Base16編碼,Base32編碼一樣,區別是將串起來的二進制按6位分爲一組.得到4組(24位).所以末尾不用補充"=",所以經過Base64編碼後的結果是"SUxV".

文本

I

L

U

ASCII編碼

73

76

85

二進制位

0

1

0

0

1

0

0

1

0

1

0

0

1

1

0

0

0

1

0

1

0

1

0

1

十進制數值

18

20

49

21

Base64編碼

S

U

x

V

總結

1.Base16編碼是包含了數字(0~9)和大寫字母(A~F),Base32編碼與Base64編碼最大區別是前者沒有小寫字母.Base32編碼可以用於文件系統的名稱(不區分大小情況).而Base64編碼後數據量相比原先不是增加很多,可以用於網絡傳輸.(比如下載鏈接)

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