複習Base64編碼集的收穫

2021-09-12 10:59:08 字數 2957 閱讀 7935

最近因為工作需要對一些檔案上傳需要進行base64編碼操作,於是就自己溫習了一下base64編碼集的原理,感覺收穫良多,在這裡和大家分享一下!

因為我們都是在網際網路上資料的傳輸最終都會以二進位制的方式傳輸,檔案上傳的i/o流也不例外,最終都是二進位制陣列的方式傳輸,但是二進位制儲存到資料庫中卻是不太現實的,因為它是在太長了。

例子:我們將乙個本地檔案同i/o讀取出來,並且轉換成byte組,在裝換成base64編碼集的結果。

**如下:

public static void main(string args) throws ioexception 

byte baostype = baos.tobytearray();

baos.close();

fis.close();

//byte陣列的值[70, 65, 84, 65]

//轉換成二進位制是:‭01000110‬‭01000001‭01010100‬‬‭01000001‬

//我們將這個二進位制斷開一下 ‭01000110 ‬‭01000001 ‭01010100 ‬‬‭01000001‬

system.out.println(arrays.tostring(baostype));

byte base64 = base64.getencoder().encode(baostype);

//轉成成base64的結果:wyagrkfuquxdw1c=

system.out.println(base64.getencoder().encodetostring(baostype));

}

我們可以看到本地檔案的二進位制陣列是如下:

[70, 65, 84, 65]
如果們給他轉成二進位制格式是如下:

‭01000110 ‬‭01000001 ‭01010100 ‬‬‭01000001‬
因為數字的長度4位,所有它是有4位位元組組成,1個位元組由8位二進位制組成,我們可以通過得到如上的二進位制。

下面我們詳細講述一下base64如何把這個二進位制轉成base64的編碼集。

base64編碼集的底層是把原有的3個二進位制位元組的24位二進位制分成4份,變成4個6位的二進位制,在對著4個6位二進位制的前面加上2個0進行補位,這樣就變成4個位元組32個二進位制。而生成的新的乙個位元組的前面兩位為0,所有這樣的位元組換算成十進位制的大小範圍只能在0到63之間。如果位元組數不是3的整數倍的時候,我們就需要在原來的位元組後面新增乙個或者兩個零指的位元組,使其位元組長度是3的整數倍,同樣需要在base64編碼集編碼後的字串的後面新增乙個或者兩個「=」,表示新增的零值位元組數。

這裡簡單科普一下:乙個位元組又被稱作乙個ascii碼,也就是有8位二進位制組成,換算成十進位制的取值範圍就是-128到127之間。

而我們採用的byte位元組型別,byte位元組型別的取值型別是0到255,所以當前兩位都為0的時候,取值範圍就是0到63之間。

那麼我們按照上面的規則對如下的乙個4位位元組的二進位制進行轉成:01

0001

1001

0000

0101

0101

0001

0000

01

第一件事我們要在原來的4個位元組的後面新增兩個零值位元組變成如下結果:01

0001

1001

0000

0101

0101

0001

0000

0100

0000

0000

0000

00

第二件事我們給這個6個位元組的進行6位一組重新劃分,劃分結果如下:01

0001

1001

0000

0101

0101

0001

0000

0100

0000

0000

0000

0001

0001

1001

0000

0101

0101

0001

0000

0100

0000

0000

0000

00

第三件事對重新劃分的6位在前面進行補位操作補上0得到的格式如下:00

0100

0100

1001

0000

0001

0100

0101

0000

0100

0000

0100

0000

0000

0000

0000

00這樣我們就得到乙個8個位元組的8位二進位制,左邊是8位二進位制,而右邊是十進位制的值。

第四件事我們就是需要對照base64的碼表:0a

8i16q

24y32g

40o48w

5641b

9j17r

25z33h

41p49x

5752c

10k18s

26a34i

42q50y

5863d

11l19t

27b35j

43r51z

5974e

12m20u

28c36k

44s520

6085f

13n21v

29d37l

45t531

6196g

14o22w

30e38m

46u542

62+7h

15p23x

31f39n

47v553

63/

對照上面的base64碼表我們很重找到結果是如下的:

rkfuqq==

綜上所述我們可以很清晰了解到base64的編碼格式。

base64編碼 動畫演示 Base 64 編碼

base64 是一種十分流行的編碼方式,僅僅使用 64 個字元加等號 就可以以文字的形式表示所有的二進位制資料了,因為它能夠把二進位制格式通過編碼轉換成可見字元,所有我們就可以通過的把二進位制格式比如,檔案等通過 base64 編碼然後通過文字的形式共享出去,是不是很神奇呀。把輸入的資料轉換成 二進...

Base64編碼演算法

base64要求把每三個8bit的位元組轉換為四個6bit的位元組 3 8 4 6 24 然 後把6bit再添兩位高位0,組成四個8bit的位元組,也就是說,轉換後的字串理 論上將要比原來的長1 3。轉換後,我們用乙個碼表來得到我們想要的字串 也就是最終的base64編碼 這個表是這樣的 0 a 1...

Base64編碼演算法

base64 construe aaaaaaaa bbbbbbbb cccccccc dddddddd ffffffff 3byte to 4byte is encode 00aaaaaa 00aabbbb 00bbbbcc 00cccccc 3byte newlen 4 00aaaaaa 00aa...