base64的原理,
http://www.cnblogs.com/diligenceday/p/6002382.html
http://www.cnblogs.com/chengxiaohui/articles/3951129.html
base64的碼表只有64個字符, 如果要表達64個字符的話,使用6的bit即可完全表示(2的6次方為64)。
因為Base64的編碼只有6個bit即可表示,而正常的字符是使用8個bit表示, 8和6的最小公倍數是24,所以4個Base64字符可以表示3個標准的ascll字符;
public void Base64Test() { string abc = "abc"; var array = Encoding.ASCII.GetBytes(abc); string result = Convert.ToBase64String(array); Console.WriteLine(result); }
因為3個ASCII字符,才能和4個base64字符對應。如果ASCII字符不足3個,即不足24bit。
從左往右,需要解析出至少4個字符,能解析的字符直接解析,無法解析的,直接用=表示。
n*8/6
比如單個字符A,轉換為Base64。
單個字符A,1個字節,8bit。
字符A的對應的ASCII是十進制是65, 二進制是01000001。
按照6bit進行拆分,得到010000 01,只能解析出2個字符010000 010000,還缺少2個base64的字符,直接解析為=。
擴展:
根據字節數組的長度,來計算加密后的字符長度,以及=的個數。
字節數組長度為39,13*4=52;
字節數組長度為40,40/3=13...1 13*4+4=56; 多出1個ASCII字符,可以解析2個base64字符,還要補上2個=。 8*1/6向上取整,所以解析2個base64字符。
字節數組長度為41,41/3=13...2 13*4+4=56;多出2個ASCII字符,可以解析3個base64字符,還要補上1個=。 8*2/6向上取整,所以解析出3個base64字符