在这里我只讲Base64编码,其次Base32和Base16原理是一样的,这里一带而过。
1.Base64:顾名思义,64就是64个可打印字符,A~Z、a~z、0~9、+、/,这64个可打印字符。2^6=64
**原则:**3*8 转换成4*6 这里的8是指电脑的二进制位8bit 即一个字符在电脑里存储情况,3指的是三个字符(任意),4指的是64个中4个可打印字符,6只得是6个二进制位。要想得到可打印字符,必须将6位补位00,形成8个二进制位,再换算十进制数,再用这个十进制数找到相应的可打印字符。后面会有例子。
2.Base32:就是32个可打印字符,2^5=32, base32中就是用5个bit位表示8bit位的字符。取其中的最小公约数,则8个base32字符表示出5个字符
原则:用5个bit 表示一个32个可打印字符中的一个,过程和Base64同理。
3.Base16:同Base32。

注意:

24位二进制很重要,这就是为什么要以三个字符为一组的原因。 所以在其他编码形式(如用到汉字时的GBK、UTF-18)从24位二进制倒推回编码前所要求的字符个数(如UTF-18里一个汉字是2-4个字节,当一个汉字为三字节时,就以这一个汉字为一组)

一. Base64编码由来

  为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情 况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。Base64编码应运而生,Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法。

二. Base64编码原理

  看一下Base64的索引表,字符选用了”A-Z、a-z、0-9、+、/” 64个可打印字符。数值代表字符的索引,这个是标准Base64协议规定的,不能更改。64个字符用6个bit位就可以全部表示,一个字节有8个bit 位,剩下两个bit就浪费掉了,这样就不得不牺牲一部分空间了。这里需要弄明白的就是一个Base64字符是8个bit,但是有效部分只有右边的6个 bit,左边两个永远是0。
那么怎么用6个有效bit来表示传统字符的8个bit呢?8和6的最小公倍数 是24,也就是说3个传统字节可以由4个Base64字符来表示,保证有效位数是一样的,这样就多了1/3的字节数来弥补Base64只有6个有效bit 的不足。你也可以说用两个Base64字符也能表示一个传统字符,但是采用最小公倍数的方案其实是最减少浪费的。结合下边的图比较容易理解。Man是三个 字符,一共24个有效bit,只好用4个Base64字符来凑齐24个有效位。红框表示的是对应的Base64,6个有效位转化成相应的索引值再对应 Base64字符表,查出”Man”对应的Base64字符是”TWFU”。说到这里有个原则不知道你发现了没有,要转换成Base64的最小单位就是三个字节,对一个字符串来说每次都是三个字节三个字节的转换,对应的是Base64的四个字节。这个搞清楚了其实就差不多了。

实例:

变成6位后要想获得十进制数,必须在前面两位补00 形成8个bit二进制位,转换成相应的十进制数,来查询索引


 但是转换到最后你发现不够三个字节了怎么办呢?愿望终于实现了,我们可以用两 个Base64来表示一个字符或用三个Base64表示两个字符,像下图的A对应的第二个Base64的二进制位只有两个,把后边的四个补0就是了。所以 A对应的Base64字符就是QQ。上边已经说过了,原则是Base64字符的最小单位是四个字符一组,那这才两个 字 符,后边补两个”=”吧。其实不用”=”也不耽误解码,之所以用”=”,可能是考虑到多段编码后的Base64字符串拼起来也不会引起混淆。由此可见 Base64字符串只可能最后出现一个或两个”=”,中间是不可能出现”=”的。下图中字符”BC”的编码过程也是一样的。

Base32索引表:

Base16索引表:

三. 总结

  说起Base64编码可能有些奇怪,因为大多数的编码都是由字符转化成二进制的过程,而从二进制转成字符的过程称为解码。而Base64的概念就恰好反了,由二进制转到字符称为编码,由字符到二进制称为解码。

  Base64编码主要用在传输、存储、表示二进制等领域,还可以用来加密,但是这种加密比较简单,只是一眼看上去不知道什么内容罢了,当然也可以对Base64的字符序列进行定制来进行加密。

  Base64编码是从二进制到字符的过程,像一些中文字符用不同的编码转为二 进制时,产生的二进制是不一样的,所以最终产生的Base64字符也不一样。例如”上网”对应utf-8格式的Base64编码是”5LiK572R”, 对应GB2312格式的Base64编码是”yc/N+A==”。

Base64也可以加密一张图片,将图片的二进制转化为base64就ok。其实所有能转换成二进制的都可以用Base编码进行加密。偷偷告诉你迅雷的BT就是用BASE64加密的哦。

Base64、32、16 编码解析相关推荐

  1. base64/32/16编码

    base64就是一种编码格式,使用64个可见字符来表示二进制数据,可以将任意二进制数据编码成字符串.base64编码把3个8位字节转化为4个6位的字节,6位2进制能表示的最大十进制数是64,所以使用6 ...

  2. 音频之WAV格式编码解析

    学习目标: 音频之WAV格式编码解析 学习内容: 介绍 WAV是最常见的声音文件格式之一,wav文件分为两个部分,第一个部分是wav头文件,第二个部分是PCM编码的音频数据部分.是微软公司专门为Win ...

  3. 格力空调红外编码解析

    使用红外遥控空调,就必须先了解红外遥控的原理,数据的定义等.本博客解析了空调的最基本的功能的红外编码,包括:开关,温度,定时,风速,扫风,校验码.其他的功能因为空调型号不同而差别较大,所以暂时不作解析 ...

  4. HTTP1.1中CHUNKED编码解析(转载)

    HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RF ...

  5. OpenJudge NOI 1.7 32:行程长度编码

    [题目链接] OpenJudge NOI 1.7 32:行程长度编码 [题目考点] 1. 字符串 [解题思路] 本题与OpenJudge NOI 1.7 31:字符串p型编码基本相同.可以参考上一题的 ...

  6. python 图片/语音文件实现base64的转换与解析

    转化与解析流程:二进制读取---转为base64(b64encode)--- 解码(b64decode)--- 输出图片/语音文件 # 实现base64的转化与解析 with open('test.p ...

  7. 便利贴--41{js - base64 - _utf8_ 的编码和解码}

    便利贴--41{便利贴--41{js - base64 - _utf8_ 的编码和解码}} 编码 解码 utf8 合并 编码 this.encode = function (input) {_keyS ...

  8. Base64与16进制转换

    记录与硬件通信的Base64与16进制字符串转换 /*** 202212* <p>* base64ToHex* HexToBase64* </p>*/ public class ...

  9. java chunked编码解码_HTTP协议中的CHUNKED编码解析

    HTTP协议中的TRANFER-ENCODING:CHUNKED编码解析 通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输.c ...

  10. Protobuf编码解析

    protobuf的安装 tar zxvf protobuf-cpp-3.8.0.tar.gz cd protobuf-3.8.0/ ./configure CXXFLAGS="-O2&quo ...

最新文章

  1. CodeForces 157A Game Outcome
  2. java中数组的一些笔记
  3. FFT算法8点12位硬件实现 (verilog)
  4. SublimeText3系列(1)-安装、设置、快捷键、常用插件
  5. MySQL中表的操作
  6. Day04-经典卷积神经网络解读
  7. 针对应用开发者的几点建议
  8. textview文本超出部分用省略号表示
  9. 【JAVA基础篇】String类详解
  10. SpringBoot学习笔记(8):事物处理
  11. Delphi中使用API将目录删除函数
  12. 聊聊2019年的web前端
  13. Android studio断点调试(全在这里)
  14. 【转贴】gdb中的信号(signal)相关调试技巧
  15. 微软在线实验室启用谷歌的reCAPTCHA,我们又丢失了一个好东东
  16. Dagger2 知识梳理(3) 使用 dependencies 和 @SubComponent 完成依赖注入
  17. 奥维互动地图如何删除标签_奥维互动地图浏览器标签附件添加设置方法
  18. DOSBOX 安装与使用
  19. 人工智能的语义学基础
  20. 这是你不曾见过的最全的ASO应用市场优化方式(上篇)

热门文章

  1. 直面不确定性 看致远互联如何帮助组织自生长
  2. i.MX6ULL终结者MPU6050 六轴传感器例程MPU6050简介
  3. DELL_R820服务器安装 server2008 R2x64缺少所需的CDDVD驱动器设备驱动解决方法
  4. android第三方库进程,Android 第三方库AgentWeb的使用
  5. Wiki管理工具有哪些?11款Wiki工具对比
  6. 二叉树的递归与非递归遍历详解
  7. Pr 音频效果参考:混响
  8. 机器学习原理与实践(Python版)
  9. pb语言是什么计算机语言,Pb编程语言深入讲解,了解pb语言的if判断语句!
  10. 微信小商店的选型参考及感想