口算base64

口算base64

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

总的来说,base64算法就是将原数据每3个字节(24bit)分为一组,然后将这些数据按每6bit一组的格式,重新划分为4组,分组完成后,将每6bit数据为单元映射。

base64表格请见 https://tool.hiofd.com/base64-encoding-table/

它的编码流程是:

  1. 将给定的数据转换成二进制编码,转换成二进制编码的方式。

  2. 对给定的编码做分组转换操作,每3个字节(24bit)分为一组,然后将这24bit划分为4组6bit。

  3. 对获得的4组6bit编码进行补位,向6bit编码的高位补2bit 0,变成4组8bit编码。

  4. 将每个8bit编码转换为十进制编码。

  5. 以十进制编码为索引,映射为上表中对应的字符。

根据第二点,聪明的观众可以得出:base64解码时要分类讨论,分为 原字符串长度是否是三的倍数

举个例子:将ABC转换为base64

  1. 将ABC分别转换成二进制数据
  2. 将二进制数据以6bit分为四组
  3. 将四组6bit进行高位补0,补成8bit
  4. 将补完后的8bit二进制转换成十进制
  5. 按照十进制编号找到对应的字符

如图

image

那么,如果原字符串长度不是3的倍数:

举例:将ABCD转换为base64

  1. 将ABCD分别转换成二进制数据
  2. 由于ABCD总共有32bit,需要补全称24的倍数,补全16bit,补全后,将二进制数据以6bit分为四组
  3. 将四组6bit进行高位补0,补成8bit
  4. 将补完后的8bit二进制转换成十进制
  5. 按照十进制编号找到对应的字符
  6. 由于后边16位0都是填充的,因此不能映射成字符A,base64中规定,填充的0字节用等号补位

3545a8bbb814838446fede1fd55a3ba

原文的数据长度除以3后,余数=0时,编码后没有=;当余数为1时,后面有两个=,当余数是2时,后面有一个=,则=的个数也就是补充的字节数。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容