1. Base64是什么?

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法

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

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

在Base64中的可打印字符包括字母A-Z、a-z、数字0-9共有62个字符,加上+、/共64个字符,实际上还有一个字符=来作为后缀。

2. Base64编码的规则

①把3个字节变成4个字节。
②每76个字符加一个换行符。
③最后的结束符也要处理。

3. Base64编码原理

Base64编码的思想是:采用64个基本的ASCII码字符对数据进行重新编码。

①将需要编码的数据拆分成字节数组,以3个字节为一组,按顺序排列24位数据,再把这24位数据分成4组,即每组6位;

②再在每组的的最高位前补两个0凑足一个字节,这样就把一个3字节为一组的数据重新编码成了4个字节;

③当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节,这时在最后一组填充1到2个0字节,并在最后编码完成后在结尾添加1到2个=号。

4. Base64如何编码

如果将索引转换为对应的二进制数据的话需要至多6个Bit。然而ASCII码需要8个Bit来表示,那么怎么使用6个Bit来表示8个Bit的数据呢?6个Bit当然不能存储8个Bit的数据,但是46个Bit可以存储38个Bit的数据啊!如下表所示:

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

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

Base64编码解码(一)——介绍相关推荐

  1. Golang Base64编码解码

    Golang Base64编码解码 Golang内置支持Base64编码解码,Go的encoding/base64包遵照RFC 4648规范实现了base64编码解码功能,包括标准方式以及URL/文件 ...

  2. linux中常用的加密总结--base64编码解码与openssl实现

    linux中常用的加密总结–base64编码解码与openssl实现 一.base64 !!!base64是一种数据编码方式,可逆,不是严格意义上的加密算法,不能作为安全加密使用 -d,–decode ...

  3. js base64 编码解码

    js base64 编码解码 encode decode,可以直接使用 function Base64() {// private property_keyStr = "ABCDEFGHIJ ...

  4. python使用base64编码解码数据

    python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...

  5. java svgbase64转byte_java 图片进行base64 编码解码

    java 图片进行base64 编码解码 刘振兴 代码分享 2017年06月07日 10555 2条评论 import sun.misc.BASE64Decoder; import sun.misc. ...

  6. openssl算法 —— 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    openssl 加密字符串的方法: 一.利用openssl命令进行BASE64编码解码(base64 encode/decode): 1. BASE64编码命令 对字符串'abc'进行base64编码 ...

  7. Java工程中引用Base64编码解码小记

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一. Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两 ...

  8. Java Base64 编码解码方案总结

    转载自  Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...

  9. 一些Base64编码/解码及数据压缩/解压方面的知识

    一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...

  10. Javascript中Base64编码解码的使用实例

    Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 1 var encodedStr = win ...

最新文章

  1. 对话迈克尔·乔丹:太多人关注个体智能,而不关注体系
  2. 利用合成图像对热图像进行鲁棒行人检测
  3. python编程语言是什么-python是什么编程语言
  4. 绿色运营,数据中心还得靠自动化
  5. indesign中调出字符样式快捷键_Word中十大黄金快捷键,你会用几个?
  6. 机器学习接口和代码之 KNN
  7. CSE 5/7350 – Project Course Timeslot and Student Assignment Project
  8. Linux的重定向与管道
  9. kali linux 安装中文输入法
  10. windows系统常用运行命令大全
  11. 微信小程序列表项的右侧带箭头(非常简单)
  12. php元换成万元,元换算成万元公式(元换算成万元换算器)
  13. HTML+CSS大作业`游戏设计网站设计——游戏介绍(5页) 大学生游戏网页设计作业模板下载 网游网页设计作业成品 静态HTML手游网页制作下载_网页设计代码
  14. 360浏览各模式及内核的使用说明
  15. 数码博主自用五款高性价比蓝牙耳机分享,双11不想踩雷选什么蓝牙耳机好?
  16. dns劫持 tplink_解决路由器DNS劫持的两种方法
  17. 【总结】pick定理Farey序列
  18. android 定时响铃,Android开发振动和响铃
  19. Linux重映射外设设备名
  20. linux 5.5安装万兆网卡驱动,CentOS下安装网卡驱动

热门文章

  1. 常用 shell sql 命令
  2. 用好binutils之gporf
  3. Spring Cloud(Greenwich版)-01-服务生产者与服务消费者
  4. 每周更新:React UI 库、WebStorm 2019.1.1、PaySDK v2.0.1和Spring Boot 2.2 第二个里程碑 M2等更新发布
  5. Java url转MultipartFile inputStream转File file转multipartFile
  6. python qq红包_numpy的Python,发红包,用
  7. golang 获取当前年月日
  8. 使用epublib自动生成epub文件
  9. 解决办法:java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_eye(III)J
  10. 编程基本功:谁改出的问题谁解,对不对?