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...