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 編碼然後通過文字的形式共享出去,是不是很神奇呀。把輸入的資料轉換成 二進...