浅谈Base64编码算法
一、什么是编码解码
编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码。
解码:利用编码使用的算法的逆运算,对经过编码的数据进行处理,还原出原始数据,这种操作称之为解码。
二、什么是Base64编码算法
可以将任意的字节数组数据,通过算法,生成只有(大小写英文、数字、+、/)(一共64个字符)内容表示的字符串数据。
即将任意的内容转换为可见的字符串形式。
三、Base64算法的由来
以前发送邮件只支持可见字符的传送。由此,需要有一个方法将不可见的字符转换为可见的字符,便产生了Base64编码算法
四、Base64算法的特点
1、将数据按照 3个字节一组的形式进行处理,每三个字节在编码之后被转换为4个字节。
即:如果一个数据有6个字节,可编码后将包含6/3*4=8个字节
2、当数据的长度无法满足3的倍数的情况下,最后的数据需要进行填充操作,即补“=” ,这里“=”是填充字符,不要理解为第65个字符
eg: 三个字节 ,转换成 4个字节 的过程:
可以看出,将原始数据的 每三个字节分为一组,按位进行分割为 每6位一个字节的形式,进行转换,形成新的4个字节。这四个字节才通过Base64编码表进行映射,形成最后实际的Base64编码结果。
如果原始数据最后无法凑成3个字节,则补填充,以“=”作为替换,代表没有数据
五、
Base64编码索引表
六、Base64使用场景
1、服务器给客户端在JSON中传递二进制数据
2、客户端给服务器传递参数时,通过Base64传递二进制内容
七、注意点
1、Base64是编码算法,不是加密算法,只是用来编码字节数组,形成字符串的,并提供了解码功能
2、Base64.encodeToString(byte[] data,int flag);
第二个参数设置NO_WRAP 即代表生成的字符串是否换行
Base64.encode(String str,int flag)同上