Base64編碼原理與實現

2021-08-23 15:22:19 字數 2085 閱讀 9078

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的編碼都是...