所謂base64,就是說選出64個字元----小寫字母a-z、大寫字母a-z、數字0-9、符號"+"、"/"(再加上作為墊字的"=",實際上是65個字元)----作為乙個基本字符集。然後,其他所有符號都轉換成這個字符集中的字元。
具體來說,轉換方式可以分為四步。
第一步,將每三個位元組作為一組,一共是24個二進位制位。第二步,將這24個二進位制位分為四組,每個組有6個二進位制位。
第三步,在每組前面加兩個00,擴充套件成32個二進位制位,即四個位元組。
第四步,根據下表,得到擴充套件後的每個位元組的對應符號,這就是base64的編碼值。
0 a 17 r 34 i 51 z因為,base64將三個位元組轉化成四個位元組,因此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
4.舉乙個具體的例項,演示英語單詞man如何轉成base64編碼。
text content
man
ascii
7797
110bit pattern01
0011
0101
1000
0101
1011
10index
1922546
base64-encoded
twfu
第一步,"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。
5.如果位元組數不足三,則這樣處理:
a)二個位元組的情況:將這二個位元組的一共16個二進位制位,按照上面的規則,轉成三組,最後一組除了前面加兩個0以外,後面也要加兩個0。這樣得到乙個三位的base64編碼,再在末尾補上乙個"="號。比如,"ma"這個字串是兩個位元組,可以轉化成三組00010011、00010110、00010000以後,對應base64值分別為t、w、e,再補上乙個"="號,因此"ma"的base64編碼就是twe=。
b)乙個位元組的情況:將這乙個位元組的8個二進位制位,按照上面的規則轉成二組,最後一組除了前面加二個0以外,後面再加4個0。這樣得到乙個二位的base64編碼,再在末尾補上兩個"="號。6.比如,"m"這個字母是乙個位元組,可以轉化為二組00010011、00010000,對應的base64值分別為t、q,再補上二個"="號,因此"m"的base64編碼就是tq==。
再舉乙個中文的例子,漢字"嚴"如何轉化成base64編碼?
這裡需要注意,漢字本身可以有多種編碼,比如gb2312、utf-8、gbk等等,每一種編碼的base64對應值都不一樣。下面的例子以utf-8為例。
首先,"嚴"的utf-8編碼為e4b8a5,寫成二進位制就是三位元組的"11100100 10111000 10100101"。將這個24位的二進位制字串,按照第3節中的規則,轉換成四組一共32位的二進位制值"00111001 00001011 00100010 00100101",相應的十進位制數為57、11、34、37,它們對應的base64值就為5、l、i、l。
所以,漢字"嚴"(utf-8編碼)的base64值就是5lil。
參考:
BASE64 編碼原理
unit ubase64 編碼原理 將3個位元組轉換成4個位元組 3 x 8 24 4x6 先讀入3個位元組,每讀乙個位元組,左移8位,再右移四次,每次6位,這樣就有4個 位元組了。解碼原理 將4個位元組轉換成3個位元組,先讀入4個6位 用或運算 每次左 移6位,再右移3次,每次8位,這樣就還原了。...
Base64編碼原理
一 base64編碼原理 1 base64編碼原理簡單介紹 base64要求把每三個8bit的位元組轉換為四個6bit的位元組 3 8 4 6 24 然後把6bit再添兩位高位0,組成四個8bit的位元組,也就是說,轉換後的字串理論上將要比原來的長1 3。編碼原理如下所示 1 base64的編碼都是...
base64 編碼原理
一.base64編碼由來 為什麼會有base64編碼呢?因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援可見字元的傳送,像ascii碼的控制字元就 不能通過郵件傳送。這樣用途就受到了很大的限制,比如二進位製流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協...