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

猜你喜欢

转载自www.cnblogs.com/chucklu/p/10240750.html