Base64编码后数据会存在“=”或“==”原因

1、谜底解答

说白了就是补位

Base64编码后的数据存在“=”或“==”是因为编码数据二进制转化后,按照Base64规则进行编码不够4字节而进行补得位,缺一位就补一个“=”,缺两位就补两个“==”;必须够了四个字节

2、编码原理

前面都介绍到“=”是应为Base64编码规则导致的,那这里就绕不开要介绍一下Base64的编码规则;

Base64的编码规则其实比较简单,简单来说就是总共分五步:

第一步:将原始数据三个字节一组进行分组;

eg:123ab ->123  ab

第二步:将每一组的数据ASCII码转化为二进制数据;

eg:

123 -> 49 50 51

ab -> 97 98

第三步:将二进制数据按照每6位2进制数据为一组再次进行分组,目标分成4组,每组不足6位二进制数据进行补“0”,不足4组,则进行补“=”;

eg:

49 50 51 -> 00110001 00110010 00110011 -> 001100 010011 001000 110011

97 98 -> 01100001 01100010 -> 011000 010110 001000 =

第四步:在第三步中分好组的6位2进制数前面补充两个“0”,并转化为十进制数据;

eg:

001100 010011 001000 110011 -> 00001100 00010011 00001000 00110011 -> 12 19 8 51

011000 010110 001000 = -> 00011000 00010110 00001000 = -> 24 22 8 =

第五步:查表

Base64编码提供一张编码表,第四步转化后的十进制数据就是表的索引,可根据表的索引找到对应的字符,完整的字符便是原数据Base64编码结果;

 

 eg:

 12 19 8 51 -> M T I z

24 22 8 = -> Y W I =

则123ab -> Base64编码 -> MTIzYWI=

3、编码延伸


该章节主要介绍三个问题:

3.1、Base64编码名称和编码规则有什么关系?


Base64的名称和编码规则的主要联系来源于编码原理的第三步“将二进制数据按照每6位2进制数据为一组再次进行分组”,为什么是按照6位二进制进行分组呢,是因为64=2^6;

细心的朋友从这里就可以看出,既然Base64是因为64=2^6,那是不是同样也存在Base32、Base16类似的编码方式?

答案是肯定的,的确存在Base32和Base16这样的编码方案,规则上的差异也是显而易见的,主要存在两点差异:

差异点1 编码规则中分组的位数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值