Base64编码原理及其实现

序言

在说Base64之前,我们应当知道位与字节的含义:

  • 位(bit): 计算机中数据的最小单位, 也就是平常看到的‘0’ 和 ‘1’这样的东西, 每个‘0’或‘1’代表一位。
  • 字节(Byte): 计算机中数据的基本单位,每8位组成一个字节。 即 1B =8b

为什么要Base64编码

因为在网络传输数据时,有些数据并不是都是可见字符,那些不可见字符(如 空格、换行等等)可能会被处理错误。 像传输图片, 图片我们用文本编辑器打开的话是乱码的,因为包含了不可见的字符。 直接传输的话,那些不可见的字符传输就有问题,所以Base64编码解决的就是 把不可见的字符全部编码为可见的字符,这样传输被处理错误的可能性大大降低。

Base64编码原理

Base64是一种基于64个可打印的字符来表示二进制数据的方法。 可打印的64个字符包含A-Z、a-z、0-9、+、/

如下图:

Base64索引表

Base64编码原理几个基本步骤

  • 每3个字节的ascii码为一组,就有24bit
  • 然后分为4组,每组6bit。
  • 算出每组二进制转为十进制值
  • 然后根据Base64 索引表 (十进制值就代表索引) 来找对应的字符。 得到的就是Base64编码后的字符。

例如 abc

  • ascii编码 : 97 、 98 、99
  • 二进制 : 01100001 、 01100010 、01100011
  • 每6bit分为一组: 011000 、010110 、 001001 、100011
  • 索引值: 24 、 22 、 9 、 35
  • 根据Base64索引表找到对应的值: Y 、 W 、 J 、j

测试验证:

abc经Base64编码后

"abc"经过Base64编码后得到的结果为YWJj , 说明按照这样的计算时没有问题的。
如果待Base64编码的字节数不是3的倍数怎么办。

一个字节时: Base64是每三个字节一组,但是只有一个字节,只有8位,每6位分为一组,多出的2位 不足6位, 就后面补0 凑齐6位, 但是后面还有两个输入数据,不够就用 ‘=’代替。 如上图

测试验证:

a经Base64编码后

两个字节时: Base64是每三个字节一组,但是只有两个字节,只有16位,每6位一组,多出4位,不足
6位,后面补两个0凑齐6位, 但是最后还有一位需要输入,就用‘=’代替。如上图

测试验证:

ab经Base64编码后

Base64是以三个字节为一组,所以只有两种情况:要么多一个字节,要么多两个字节。 多一个字节时后面会多两个‘==’,多两个字节时会多一个‘=’。
Base64解码就是编码逆过程,懂编码原理,解码原理逆推即可。

总结:

  • Base64编码作用就是把有不可见的字符全部转为可见的字符。以方便网络传输;
  • Base64不属于加密,虽然Base64编码后,肉眼很难看出来,但是Base64编码原理很简单,很容易被解析出来。
  • 字符在不同的编码下,如UTF-8、GBK等。可能通过Base64编码后得到的结果不同。
  • Base64是以三个字节为一组,3*8=24位,然后以6位一组,4组那就是4个字节,所以每三个字节Base64后就会多出一个字节。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值