beforeencode為encode之前的字串
那麼encode後的字串長度為:
1、如果beforeencode.length()是3的整數倍,那麼長度為
(beforeencode.length()/3)*4
2、如果beforeencode.length()不是3的整數倍,那麼長度為
(beforeencode.length()/3+1)*4
為什麼是這個樣子呢,原理如下:
首先,base64編碼的原理是先將原始檔以標準位元組(byte)為單位轉化成二進位制,乙個位元組佔8個位(bit),如「abc」的二進位制是01000001、01000010、01000011,這樣原始檔就形成了每8個bit一組的一串二進位制,然後將這些二進位制串以base64特有的規則(每個位元組佔6個位)再轉化成base64格式的字元(如下圖),編碼完成。解碼就是這個過程反過來。
base64 編碼表
value char value char value char value char
0 a 16 q 32 g 48 w
1 b 17 r 33 h 49 x
2 c 18 s 34 i 50 y
3 d 19 t 35 j 51 z
4 e 20 u 36 k 52 0
5 f 21 v 37 l 53 1
6 g 22 w 38 m 54 2
7 h 23 x 39 n 55 3
8 i 24 y 40 o 56 4
9 j 25 z 41 p 57 5
10 k 26 a 42 q 58 6
11 l 27 b 43 r 59 7
12 m 28 c 44 s 60 8
13 n 29 d 45 t 61 9
14 o 30 e 46 u 62 +
15 p 31 f 47 v 63 /
"abc"的轉化為base64字元的邏輯如下:
a b c
ascii十進位制 65 66 67
8bit/byte 01000001 01000010 01000011
6bit/byte 010000 010100 001001 000011
base64十進位制 16 20 9 3
base64字元 q u j d
這樣,"abc"三個標準字元就轉化成了"qujd"四個base64字元。
明眼人就會發現,base64編碼以後位元組數會增加,事實上也確實如此,因為原先8個佔位的位元組轉化成了6個佔位的位元組,每3個原先的位元組就轉化成了4個base64位元組。這算是base64編碼的乙個***吧。先忽略這個,講重點。
現在問題來了,既然編碼和解碼的規律是固定的大家都知道,那還怎麼起到加密的作用呢?
這種編碼的方式有個特點,就是解碼的時候要麼從最前面的位元組往後推,要麼從最後的位元組往前推,最前面和最後面的位元組可以直接影響到全部的解碼結果。跟多公尺諾骨牌一樣,乙個錯誤,後面都會跟著錯誤。
既然這樣,我們在原始檔的最前面和最後面分別加上乙個簡單的字元,那解碼出來的檔案內容就跟原始檔相差了十萬八千里,因為第乙個不對,那以此類推,後面的解碼都會錯誤。
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...
base64加密 例子
12349 50 51 31 32 33 00110001 00110010 00110011 001100 010011 001000 110011 00001100 00010011 00001000 00110011 12 19 8 51 mtiz base64編碼說明 base64編碼要求把...
Base64 加密 解密
1 原理 轉碼過程例子 3 8 4 6 記憶體1個字元佔8位 轉前 s 1 3 先轉成ascii 對應 115 49 51 2進製 01110011 00110001 00110011 6個一組 4組 011100110011000100110011 然後才有後面的 011100 110011 00...