一、什么是Base64编码

Base64是一种用64个字符来表示任意二进制数据的方法。它是一种编码方式,而非加密方式。它通过将二进制数据转变为64个“可打印字符”,完成了数据在HTTP协议上的传输

二、为何要用base64 转换二进制

计算机识别的都是二进制数据,依据我们给的编码方式不同,对方机器得到的数据解码展示的也就不一样。

HTTP协议为超文本协议,一般都是通过网络将 服务器数据传输到 客户端的浏览器中,浏览器展示的都是文本 协议,也就是文字,这个文字的展示是二进制的按照ASCII 或者其他编码进行的,最基础的是 可打印字符(能够展示使用字符展示出来的),但是图片的二进制数据包含不可打印字符的(也就是文字识别不了)

就是说 要么我是文本展示,要么我是 二进制展示,如果文本中加了二进制 图片 我用文本解码器显然会出错(包的划分方式),所以我得将 二进制的图片转成 可打印的,也就是文本能够展示的。所以这个编码方式就是 用了base64 转换。

资料来源【 https://blog.csdn.net/s13383754499/article/details/80914157 】文中说 “HTTP协议为文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。”

这句话应该是有一些问题的,网络传输是二进制传输的,应该是http 的展示 问题,所以才进行转换字符数据。

关于网络传输问题,可以看我的另一篇文章:https://www.cnblogs.com/zhangxiaoji/p/15676589.html

什么是可打印字符?

在ASCII码中规定,0-31、128这33个字符属于控制字符,32-127这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。

所以如果要传输 不能打印的字符,那么就要进行转换,base64就是做的这种转换,也是因为base64的存在,http才能传输非文本类型数据。

三、base64如何进行转换?

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。然后将其和编码表对应,转成相应的字符。

eg:

11111111 11111111 11111111
00111111 00111111 00111111 001111111
63 63 63 63
/ / / /

关于编码表:

注意:

原文的字节最后不够3个的地方用0来补足,转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。

本文内容来源: 【https://blog.csdn.net/s13383754499/article/details/80914157

里面有一些问题,已在文中指出,如果有不对的地方,希望各位大佬帮忙指出,在此感激不尽!!!

最新文章

  1. 《使用Hibernate开发租房系统》内部测试笔试题
  2. 面试中常问的有关随机选取k个数的总结
  3. 【JavaScript】Html form 提交表单方式
  4. <iframe>标签自适应高度和宽度
  5. JEECMS中返回列表跳转的几种方式
  6. 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数
  7. django 学习-12 Django表单 初步
  8. 【转】【React Native开发】
  9. RCTF Re300 Writeup
  10. STL中deque
  11. 我手写的简易tomcat
  12. JsonRequestBehavior不存在问题,JsonRequestBehavior属于哪个dll
  13. django---一对多和多对多字段的操作训练
  14. Spring Security默认的用户登录表单 页面源代码
  15. oracle数据库导出与导入
  16. [py]py里的isinstance判断实例来源(含父类)
  17. appium简明教程(7)——Desired Capabilities详解
  18. 【JVM译文】JVM问题定位前的准备工作有哪些
  19. 在云主机或vps上用bzr拉OpenERP7.0代码
  20. (四)Jmeter之逻辑控制器(Logic Controller)

热门文章

  1. npm下载错误解决办法
  2. STL学习笔记1
  3. Java SSLSocket
  4. 第7章 使用性能利器——Redis
  5. Hibernate框架使用之环境搭建
  6. Cyber Apocalypse 2021 pwn write up
  7. 祭出“成本”列(Project)
  8. JavaScript数组的push()等方法的使用
  9. Excel数据导出功能
  10. 可以通过外键的.id直接传值