base64編碼詳解

2021-07-25 04:58:52 字數 2960 閱讀 8698

std::string basic_64::getbase64str(std::string& strsource)

;//存放ascii值

if (nloop <= 0)

return encodestr.c_str();

} for( k = 0 ; k < lenstring; k+=3 )

b[0]=strsource[k];

encodestr+=chkey[(b[0] & 0xfc/*11111100*/)>>2];//獲得第乙個位元組的前6位(使用11111100和b[0]相與,然後右移2位得到結果)

if ( (k+1)>4];

if ( (k+2)>6];

encodestr+=chkey[(b[2] & 0x3f/*00111111*/)];

}else//(k+2)>lenstring

}else//(k+1)>lenstring

} return encodestr.c_str();

}

通過上面的**就可以將可見字元轉化為base64位的編碼形式。

1、引入64位編碼的原因:為了在http傳遞的過程中,為了隱藏較長的識別符號,引入了base64位編碼。通過64位編碼之後,資料無法用肉眼識別,因此有很好的保密性。

2、編碼的原理:其實很簡單,將8位2進製資料轉化為6位2進製資料的標示形式

具體的做法是:1)、將乙個位元組8位2進製,從高位到低位,6位2進製分為1組,然後將這些6位2進製位元組組,向右移動2位(即最高位補00),這樣就構成了乙個新的位元組,通過比較base64的ascii表,得到相應的字元;2)如果得到6位2進製資料後,剩餘的2進製位無法構成乙個6位數,這時就需要分兩種情況處理。當剩餘2個2進製位時,這時就需要補4個二進位制位,base64規定,在這2個二進位制後面,新增兩個"=",作為補位(其實內容中是補兩個00,顯示的時候使用=),然後最高位補00,這樣就構成了乙個8位二進位制數;當剩餘4個2進製位時,這時就需要補2個二進位制位,base64規定,在這4個二進位制後面,新增乙個"=",作為補位,然後最高位補00,構成乙個新位元組。

3)構成新的位元組後,從base64的ascii表,得到相應的字元,得到最終編碼後的字串。

例如:a(二進位制位:01000001)

首先得到第乙個6位二進位制:010000,然後高位補00,得到的新8位二進位制數為:00010000

然後得到第二個6位二進位制:因為剩餘01,所以在01後面不兩個00,得到010000,然後高位補00,得到的新8位二進位制數為:00010000

最終得到的兩個位元組為:00010000  00010000;通過查base64的ascii錶可得知為qq,所以最終的結果為qq==

如:abc(二進位制編碼為:01000001  01000010  01000011)

首先得到第乙個6位二進位制:010000,然後高位補00,得到的新8位二進位制數為:00010000

再次得到第二個6位二進位制:010100,然後高位補00,得到的新8位二進位制數為:00010100

再次得到第三個6位二進位制:

001001

,然後高位補00,得到的新8位二進位制數為:00

001001

最後得到第四個6位二進位制:

000011

,然後高位補00,得到的新8位二進位制數為:00

000011

最終得到的四個位元組為:00010000  00

010100  00

001001  00

000011

;通過查base64的ascii錶可得最終的結果為qujd

base64的ascii表為:

索引對應字元 索引

對應字元 索引

對應字元 索引

對應字元 0

a 17 r

34 i

51 z

1 b

18 s

35 j

52 0

2 c

19 t

36 k

53 1

3 d

20 u

37 l

54 2

4 e

21 v

38 m

55 3

5 f

22 w

39 n

56 4

6 g

23 x

40 o

57 5

7 h

24 y

41 p

58 6

8 i

25 z

42 q

59 7

9 j

26 a

43 r

60 8

10 k

27 b

44 s

61 9

11 l

28 c

45 t

62 +

12 m

29 d

46 u

63 /

13 n

30 e

47 v

14 o

31 f

48 w

15 p

32 g

49 x

16 q

33 h

50 y

對於base64的解碼過程,是編碼的逆過程,放在下一節講解

Base64編碼詳解

一.base64編碼由來 為什麼會有base64編碼呢?因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援可見字元的傳送,像ascii碼的控制字元就 不能通過郵件傳送。這樣用途就受到了很大的限制,比如二進位製流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協...

Base64編碼詳解

base64編碼以24個二進位制為乙個基本計算單位。base64編碼的由來是由於0 63都有唯一的對應字母,剛好有64個字元,所以叫base64。要想表示64個所有的字元,需要6 64 26 個位元,所以24個二進位制可以分有4個6位二進位制 4 6 24 將6個位元高位補0變為8個位元後,就可以表...

base64編碼 動畫演示 Base 64 編碼

base64 是一種十分流行的編碼方式,僅僅使用 64 個字元加等號 就可以以文字的形式表示所有的二進位制資料了,因為它能夠把二進位制格式通過編碼轉換成可見字元,所有我們就可以通過的把二進位制格式比如,檔案等通過 base64 編碼然後通過文字的形式共享出去,是不是很神奇呀。把輸入的資料轉換成 二進...