首页 > 代码库 > 简述BASE64编码的作用以及C#中对其的支持

简述BASE64编码的作用以及C#中对其的支持

分析问题

  和传统的编码不同,BASE64编码的设计致力于混淆那些8位字节的数据流。在网络传输、邮件等系统中,BASE64的编码方式被广泛的应用。BASE64不属于机密机制,但它确实把明码编程了一种很难识别的形式。

注意

  BASE64的算法十分简单,BASE64把所有的位分开,并且重新组合成字节,新的字节只包含6位,最后再在每个字节前添加两个0,组成新的字节数组。例如一个字节数组包含3个字节,BASE64编码时将把其分配到4个新的字节中(3*8/6=4),其中每个字节只填充低6位,最后把高2位置0。下图说明了BASE64的算法。

   

   

   在C#中通常使用Convert类型来进行BASE64编码和解码,它可以进行8位的字节数组和BASE64编码的字符串的转换。以下代码展示了其用法。

using System;using System.Text;namespace Test{    class Base64    {        static void Main()        {            string str = "abcde";            //Generate UTF8 byte array            byte[] bytes = Encoding.UTF8.GetBytes(str);            //Converted into Base64 string            string base64 = BytesToBase64(bytes);            Console.WriteLine(base64);            //Back to UTF8 byte array.            bytes = Base64ToBytes(base64);            //Back to string.            Console.WriteLine(Encoding.UTF8.GetString(bytes));            Console.Read();        }        //Converts 8-bit byte array into Base64 string        static string BytesToBase64(byte[] bytes)        {            try            {                //Conversion is not successful will throw an exception                return Convert.ToBase64String(bytes);            }            catch (ArgumentNullException)            {                return null;            }        }        //Converts Base64 string into 8-bit byte array        static byte[] Base64ToBytes(string base64)        {            try            {                //Conversion is not successful will throw an exception                return Convert.FromBase64String(base64);            }            catch (ArgumentNullException)            {                return null;            }            catch (FormatException)            {                return null;            }        }    }    }

  如以上代码所示,Convert类型提供了非常简单的接口以支持BASE64字符串和8位字节数组之间的转换,但需要注意的是,Convert类型在转换失败时将直接抛出异常,读者在任何时刻都必须把Convert类型的操作语句放在try、catch块中。

注意

  Convert类型的设计目的是进行内容的转换,这和类型转换是完全不同的两个概念。Convert类型同样也可以实现类型转换的功能,但读者应该使用is、as语句来提高效率。

  下面是以上代码的执行结果。

  

答案

  BASE64编码是一种用于混淆明码的编码方式,其算法是把原先的8位字节数组顺序分配到新的6位自己数组中,再在每个字节的高2位填充0来组成新的8位字节数组。在.NET中Convert类型可以用来进行BASE64字符串和8位字节数组之间的转换。