所謂base64,就是說選出64個字元----小寫字母a-z、大寫字母a-z、數字0-9、符號"+"、"/"(再加上作為墊字的"=",實際上是65個字元)----作為乙個基本字符集。然後,其他所有符號都轉換成這個字符集中的字元。
具體來說,轉換方式可以分為四步。
第一步,將每三個位元組作為一組,一共是24個二進位制位。第二步,將這24個二進位制位分為四組,每個組有6個二進位制位
第三步,在每組前面加兩個00,擴充套件成32個二進位制位,即四個位元組。
第四步,根據下表,得到擴充套件後的每個位元組的對應符號,這就是base64的編碼值。
0 a 17 r 34 i 51 z舉乙個具體的例項,演示英語單詞man如何轉成base64編碼。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
第一步,「m」、「a」、"n"的ascii值分別是77、97、110,對應的二進位制值是01001101、01100001、01101110,將它們連成乙個24位的二進位制字串010011010110000101101110。man的base64編碼就是twfu。第二步,將這個24位的二進位制字串分成4組,每組6個二進位制位:010011、010110、000101、101110。
第三步,在每組前面加兩個00,擴充套件成32個二進位制位,即四個位元組:00010011、00010110、00000101、00101110。它們的十進位制值分別是19、22、5、46。
第四步,根據上表,得到每個值對應base64編碼,即t、w、f、u。
因為,base64將三個位元組轉化成四個位元組,因此base64編碼後的文字,會比原文本大出三分之一左右。
如果位元組數不足三,則這樣處理:
a)二個位元組的情況:將這二個位元組的一共16個二進位制位,按照上面的規則,轉成三組,最後一組除了前面加兩個0以外,後面也要加兩個0。這樣得到乙個三位的base64編碼,再在末尾補上乙個"="號。比如,「ma"這個字串是兩個位元組,可以轉化成三組00010011、00010110、00010000以後,對應base64值分別為t、w、e,再補上乙個」="號,因此"ma"的base64編碼就是twe=。
b)乙個位元組的情況:將這乙個位元組的8個二進位制位,按照上面的規則轉成二組,最後一組除了前面加二個0以外,後面再加4個0。這樣得到乙個二位的base64編碼,再在末尾補上兩個"="號。比如,「m"這個字母是乙個位元組,可以轉化為二組00010011、00010000,對應的base64值分別為t、q,再補上二個」="號,因此"m"的base64編碼就是tq==。
密碼系列 Base64
什麼是 可列印字元 呢?為什麼要用它來傳輸8bit位元組碼呢?在回答這兩個問題之前我們有必要來思考一下什麼情況下需要使用到base64?base64一般用於在http協議下傳輸二進位制資料,由於http協議是文字協議,所以在http協議下傳輸二進位制資料需要將二進位制資料轉換為字元資料。然而直接轉換...
Base64編碼演算法
base64要求把每三個8bit的位元組轉換為四個6bit的位元組 3 8 4 6 24 然 後把6bit再添兩位高位0,組成四個8bit的位元組,也就是說,轉換後的字串理 論上將要比原來的長1 3。轉換後,我們用乙個碼表來得到我們想要的字串 也就是最終的base64編碼 這個表是這樣的 0 a 1...
BASE64演算法實現
cstring base64encode lpctstr lpszsrc 56 63 unsigned int itest lpctstr pinbuffer lpszsrc int nsize int tcslen lpszsrc char poutbuffer new char nsize 3 ...