为什么是base64编码,而不是base32、base16、base63?

	Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为
	字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0~31、127这33个字符属
	于控制字符,32~126这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。

基于上述文字,下面是我对base64编码的分析理解

(注:以下只考虑base64涉及的编码解码过程,中间过程不予探讨)

  • 目的:HTTP是文本协议,我们需要用字符串来表示二进制数据以便HTTP协议解析传输,并且满足传输前后数据一致。
  • 约束:传输的字符受限(95个),所以必须使用这95个字符以内的数据来表示二进制数据。
  • 思路:寻找一种合适的编码解码方案。
    例如:
    编码(encode)时,将二进制数据 '01 编码成字符 ‘a’。
    解码(decode)时,将字符串 ‘a’ 解码成二进制数据 ‘01’。

条件推导:

  • 为了编码解码的正确性,我们必须保证二进制单位数据和编码字符的一一映射。
  • 由于任意字符类型数量,我们都可以缩小/扩大二进制数据编码单位来与之对应,而字符数量被约束在95个之下,所以我们只能缩小二进制数据编码单位来减小字符串种类来保证一一映射关系。

由此我们必须缩小二进制数据编码单位至95或以下,且因为二进制数据由0/1组成,其编码单位只能是2的指数,所以我们只能选择七位(26 < 95 < 27)以下二进制数据来作为二进制数据编码单位,也就是6/5/4/3/2/1位二进制来和26/25/24/23/22/21种字符来进行一一映射。

也就是说,我们必须选择[1,6]以内的二进制位数,如果我们选择每1位二进制都编码成一个字符,那么编码结果只有二种字符类型,编码解码效率相当快。但是每个字节就会被编码成八个字符,加大了传输量。为了减少传输量,我们选择每6位编码成一个字符,那么编码结果就有64种字符类型,每个字节使用1.33~个字符表示,每3个字节使用4个字符表示,最大化的减小了传输量,这也就是base64的由来。当我们解码时,会把每个字符解码成对应的6位二进制数据,进而实现了编码前和编码解码后数据的一致性。

文首文字来源于

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值