对于base64的简单了解

先写一下自己的总结:base64就是用64个可打印字符中的4个(每个是6位)来表示3个(每个是8位)的字节码的一种基本编码方式

ps:bit 就是位,byte 就是字节,8bit == 1byte

转载自
https://blog.csdn.net/qq_20545367/article/details/79538530

百度百科中对Base64有一个很好的解释:“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法”。

什么是“可打印字符”呢?为什么要用它来传输8Bit字节码呢?在回答这两个问题之前我们有必要来思考一下什么情况下需要使用到Base64?Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0-31、127这33个字符属于控制字符,32~126这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。

Base64,就是使用64个可打印字符来表示二进制数据的方法。Base64的索引与对应字符的关系如下表所示:
base64索引表

也就是说,如果将索引转换为对应的二进制数据的话需要至多6个Bit。然而ASCII码需要8个Bit来表示,那么怎么使用6个Bit来表示8个Bit的数据呢?6个Bit当然不能存储8个Bit的数据,但是4x6个Bit可以存储3x8个Bit的数据啊!如下表所示:在这里插入图片描述

同时可以看到每6个bit合为一组之后,在每组的前面都补了两个0,原因我还不知道,不过这使得base64编码后的结果比原字符串理论上长了1/3

可以看到“Son”通过Base64编码转换成了“U29u”。这是刚刚好的情况,3个ASCII字符刚好转换成对应的4个Base64字符。但是,当需要转换的字符数不是3的倍数的情况下该怎么办呢?Base64规定,当需要转换的字符不是3的倍数时,一律采用补0的方式凑足3的倍数,具体如下表所示:

不足补位

每6个Bit为一组,第一组转换后为字符“U”,第二组末尾补4个0转换后为字符“w”。剩下的使用“=”替代。即字符“S”通过Base64编码后为“Uw==”。这就是Base64的编码过程。

还有需要注意的是每76个字符会加一个换行符,以及最后的结束符也需要处理

在标准base64中,每行最多有76个字符(仅在Intent相关内有这个定义,如MIME,但是如果是别的领域不一定要满足这个),在每行结束的时候添加回车换行符“\r\n”,在windows系统中,“\n”是类似于箭头“↓”的功能,将光标向下平移。而“\r”是键盘“Home”功能,即将光标移动到首位。所以需要使用回车换行符才能达到Linux里的"\n"效果,即将光标往下平移至首位。还有就是在URL中,由于’+’,’/’,’=‘都是特定的意义,所以一般会对应的用’-’,’_’,’.'等替换。

————————————————
版权声明:本文为CSDN博主「艾华生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20545367/article/details/79538530

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值