图解Base64编码与解码原理及C#实现

近期有朋友帮忙写个接口,接口的参数需要实现Base64编码,但是提供的API案例只有Java版本的,于是乎想知道Base64编码的原理以及在C#的实现。.

Base64编码规则
      Base64编码的算法是采用64个基本的ASCII码字符对数据进行重新编码。首先将编码的数据拆分成字节数组,以3个字节为一组。然后按顺序排列24位数据把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。如果数据字节数不是3的整倍数,在分组时最后一组不够3个字节,这时在最后一组填充2个0字节或4个0字节在补码,并在最后编码完成后在结尾添加1到2个“=”来补码。

实现编码步骤原理
    接下来简单举例了解一下实现步骤,需求是这样,要求把“789”转成Base64编码格式,首先看看步骤:

图解Base64编码与解码原理及C#实现

“789”转码如下表,首先转换成ASCII编码,把ASCII转换成二进制,二进制按照6的倍数分割,在分割好的位前面要补2个0后再转成ASCII编码,最后按照转换后的ASCII索引在对照表找出对应的Base64编码。

图解Base64编码与解码原理及C#实现

Base64对照表:

图解Base64编码与解码原理及C#实现

问题来了,如果以6为单位平均分配后不够怎么办呢?下面以“78”和“7”为例来转码

“78”的Base64编码规则

图解Base64编码与解码原理及C#实现

"7"的Base64编码规则

图解Base64编码与解码原理及C#实现

Base64解码

    解码过程反着来,就是把4个字节再还原成3个字节,再根据不同的数据形式把字节数组重新整理成原来的数据,这里就不多说了。

C#实现Base64编码解码

    C#可以根据上面的步骤硬代码实现Base64编码解码,这里就不展示实现的源码,C#已经给我们封装好方法了,直接调用就可以了,代码参考如下:

Base64编码

byte[] bytes=Encoding.Default.GetBytes("需要转换字符串");string data= Convert.ToBase64String(bytes);

Base64解码

byte[] outstr = Convert.FromBase64String("Nzg5");string data= Encoding.Default.GetString(outstr);//解码后为789

Base64编码的用处

    说了这么多,Base64编码有啥用?

Base64编码特别时候在http和mime协议下传递数据。另外Base64编码可以实现简单的数据加密,用于安全性强的账号密码就有点不适合了。Base64编码还有其它什么用处欢迎大家留言讨论。