1. 程式人生 > >C# 處理base64 以及base64的原理分析

C# 處理base64 以及base64的原理分析

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字元