base64编解码

应用场景

是网络上最常见的传输8bit字节码的编码方式之一;
网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法;
也就是说base64编码把二进制数据转换为字符,以方便传输;

编码原理

核心思想 采用64个基本的ASCII码字符对数据进行重新编码。Base64字符表,包括大写A-Z小写a-z数字0-9和+以及/。

编码步骤

  1. 将需要编码的数据拆分成字节数组,以3个字节为一组进行拆分;当数据的字节数不是3的整倍数的时候,用0补齐;
  2. 将每组数据的二进制拼接起来,并以6位为单位分成4组;
  3. 给每组数据的最高位补充两个0,将三字节变成4字节;
  4. 将每个字节对应的10进制的值根据base64编码表查出对应的字符形成编码后的结果。在第一步用0填充的字节在编码完成后=补齐。
- 首先取ABC对应的ASCII码值
A : 65、B : 66、C : 67
- 再取二进制值
A : 01000001、B : 01000010、C : 01000011
- 然后把这三个字节的二进制码接起来
010000010100001001000011
- 再以6位为单位分成4个数据块并在最高位填充两个0后形成4个字节的编码后的值
00010000、00010100、00001001、00000011
- 再把这4个字节数据转化成10进制数
16、20、19、3
- 最后根据Base64给出的64个基本字符表,查出对应的ASCII码字符
Q、U、J、D
这里的值实际就是数据在字符表中的索引。
解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。

使用bash进行编解码的使用实例

#编码
[root@kafka eureka]# echo 'abc'| base64 
YWJjCg==
[root@kafka eureka]# echo 'ABC'| base64 
QUJDCg==
# 参数-d用于解码
[root@kafka eureka]# echo 'YWJjCg==' | base64 -d
abc

注意: 上面手动完成的过程,字母ABC的编码结果应该是QUJD,而用bash编码后的结果为QUJDCg==是因为存在不可见字符换行符,换行符编码后的结果为Cg==
base64编解码

上一篇:C#中使用protobuf-net进行序列化


下一篇:base64