iOS中Base64加密演算法

2021-07-09 02:33:49 字數 1603 閱讀 5033

base64加密演算法

base64是網路上最常見的用於傳輸8bit位元組**的編碼方式之一,可用於在http環境下傳遞較長的標識資訊。它的優點是演算法效率高,編碼出來的結果比較簡短,同時也具有不可讀性。

base64要求把每三個8bit的位元組按照每6bit一組的長度分割成四組(3*8 = 4*6 = 24),然後給每組6bit的資料新增兩位高位0,組成四個新的8bit的位元組。也就是說,轉換後的字串理論上將要比原來的長1/3。然後將新產生的四個8bit位元組根據轉換表對映為ascii字元,轉換表如下所示(最後兩個字元的定義在不同的系統中有所不同):

索引對應字元

索引對應字元

索引對應字元

索引對應字元0a

16q32g

48w1b

17r33h

49x2c

18s34i

50y3d

19t35j

51z4e

20u36k

5205f

21v37l

5316g

22w38m

5427h

23x39n

5538i

24y40o

5649j

25z41p

57510k

26a42q

58611l

27b43r

59712m

28c44s

60813n

29d45t

61914o

30e46u

62+15p

31f47v

63/

那麼如果原文的位元組數不是3的倍數,即轉換到最後部分時bit數不夠6的倍數該怎麼辦呢?我們規定,當遇到這種情況,不足的bit位使用全0來補足,轉換後需要在密文的末尾新增=號來標註。如果原文剩餘1位元組(即需要補足4位0),那麼就在密文末尾新增兩個=號,如果原文剩餘2位元組(即需要補足2位0),則新增乙個=號,這就是為什麼有些編碼後的結果會以=號結束的原因。

下面舉乙個例子 

編碼「man」 

「m」的ascii碼 = 77 = 01001101 

「a」的 = 97 = 01100001 

「n」的 = 110 = 01101110 

將這三個位元組拼合,得出乙個24位的資料: 

010011010110000101101110

現在六個一組的分開並補高位0,得到4個新的位元組為: 

00010011 00010110 00000101 00101110

對應的十進位制值為:

19 22 5 46

對應的ascii字元為

t w f u

所以「man」經過base64加密後的結果為「twfu」。

解碼同理,把 twfu的二進位制位分割,去掉高位0,重組後得到三個8位值,最後得出原碼。

下面是乙個原碼位元組數不是三的倍數的例子:

加密「m」

「m」的ascii碼 = 77 = 01001101

位數不夠6的倍數,補0後變為

010011010000

六個一組分開是

010011 010000,結果是tq

在密文末尾加兩個「=」,結果就是「tq==」。

Base64 加密演算法原理

base64是網路上最常見的用於傳輸8bit位元組碼的編碼方式之一,base64就是一種基於64個可列印字元來表示二進位制資料的方法。因為在記憶體中每個位元組佔8位,即 1 byte 8 bit,所有的資料都可以先轉成ascii碼,然後將對應的ascii碼轉為8位長度的二進位制資料,比如 s 對應 ...

Base64和3DES加密演算法原理

這篇文章是對base64和3des演算法以及他們如何在iphone平台上實現的一點總結。本文吸收了很多前人的資料和成果,在修正了其中的一些錯誤的基礎上新增了自己的理解。在此向前人出色的工作表示感謝。本文主要參考資料如下 base64加密演算法 base64是網路上最常見的用於傳輸8bit位元組 的編...

Base64加密解密

public class base64 對應asicc字元的位置 public static string base64encode string str c2 str i if i len c3 str i out base64encodechars c1 2 out base64encodech...