base64編碼的原理是按bit將每6個bit轉換成base64編碼表中的相應字元。下面是base64的編碼表:
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
在轉換到最後乙個位元組時,可能出現如下兩種情況:
1. 最後只剩下2個bit。
2. 最後只剩下4個bit。
對於這兩種情況,需要在後面被0,如下面的兩個位元組:
11011001
11011101
在轉換上面的位元組時,最後會剩下4個bit。也就是1101,這時需要在後面補0,也就是變成了110100。如果後面補一對0,轉換結果後面加乙個 「=」,如果補兩對0,加兩個「=」,也就是總共的bit數除3的餘數為1,則加乙個「=」,餘數為2,加兩個「=」。上面的兩個位元組是16個bit,除 3的餘數是1,因此,需要補乙個「=」,也就是將這兩個位元組分成如下三組:
110110
011101
110100
其中110100後面兩個0是補的,因此,查詢上面的base64編碼錶可將這兩個位元組轉換成如下的base64編碼:
2d0=
下面我們來實現這個演算法。演算法的基本原理如下:
由於每次轉換都需要6個bit,而這6個bit可能都來自乙個位元組,也可以來自前後相臨的兩個位元組。定義兩個變數:prevbytebitcount和 nextbytebitcount,這兩個變數分別表述從前乙個和後乙個節字取得的bit數。如果prevbytebitcount為0,表示6個bit 全部來自下乙個位元組的高6位。如果nextbytebitcount = 0,表示6個bit全部來自前乙個位元組的低6位。最後通過適當的移位獲得所需要的6個bit,再在上面的base64編碼表中查詢相應的字元。演算法的實現 **如下:
code:
public
staticstringencoder(bytebytes)
//處理從後乙個位元組取得高6位的情況
else
if(prevbytebitcount==0)
//處理從前乙個位元組取得低6位的情況
else
if(nextbytebitcount==0)
n+=6;
i=n/8;
intremainbitcount=bytecount-n;
if(remainbitcount<6)
break;}}
//如果總bit數除3的餘數為1,加乙個「=」,為2,加兩個「=」
n=bytecount%3;
returnresult.tostring();
} 最後可以使用下面的**來驗證encoder方法的正確性:
code:
strings="中華人民共和國";
bytebytes=s.getbytes("utf-8");
system.out.println(encoder(bytes));
//使用jdk提供的base64轉換類對位元組陣列進行base64編碼
sun.misc.base64encoderbase64encoder=newsun.misc.base64encoder();
system.out.println(base64encoder.encode(bytes));
上面的**的執行結果如下:
5lit5y2o5lq65rcr5ywx5zkm5zu9
5lit5y2o5lq65rcr5ywx5zkm5zu9
Base64編碼原理與實現
base64編碼的原理是按bit將每6個bit轉換成base64編碼表中的相應字元。下面是base64的編碼表 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...
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的編碼都是...