对于base64的使用及个人理解

注:本人并非专业人员,本文章仅是个人观点,如有疏漏或错误,请各位大佬指点。谢谢

Base64,中文译名”基于64个可打印字符来表示二进制数据”,顾名思义,这是一种利用64个可打印字符(大写A-Z,小写a-z,数字0-9,及+,/(在一些变种中+/也可能是其他字符))表示数据的编码方式,至于具体运用……本人也不是专业的,不了解base64具体运用场景,只知道有些人用来装b,某些游戏作者用来在游戏里搞事情而已。

装b的实例:某撤硕群的群公告
游戏搞事的实例

你瞅哪呢Team Salvato,说的就是你

那么我们闲言少叙,书归正传。从base64的编码开始谈谈我对base64的理解

1.base64的使用(仅为纯英文数据的编码解码)

要使用base64编码或解码,首先需要两张对照表,一张是ASCII表,用于将要编码的数据转换为二进制形式的数据;另一张是base64的编码表,用于将二进制数据转换为64个可打印字符的形式。

base64编码表
ASCII对照表

注:编码数据应转换为为二进制后进行编码

有了两张表之后我们就可以开始编码了

例如我们将'hi'用base64编码

先在ASCII表中找出h和i的数值

分别是104,105

转换为8位的二进制形式为

0110 1000和0110 1001

将其罗列后得到

0110 1000 0110 1001

一串二进制数据

再将其以6个比特为一组写出

011010

000110

1001

此时我们会发现,最后一组不满6个比特

此时我们只需要在最后一组补充0到六位即可

可得到三组数据

011010 000110 100100

将其转换为10进制数据可得

26 6 26

带入base64编码表中便可得到最终的编码结果为

aGk=

注意此时结尾存在一个=号

此=仅用作填充,对解码结果无大影响

在一段base64编码中仅会存在1或2个=

且在无=的情况下编码不会出现1个字符或5的倍数个字符

在原字符占3的倍数字节时编码结果无=

注:base64的编码结果必须区分大小写,否则将与原数据不符

2.对部分原理的理解

上面我们叙述了base64编码的方式,下面我们就着以上的一些理论分析其原理及概念

首先,我们说说ASCII是什么

ASCII,全称American Standard Code for Information Interchange,中文名美国信息交换标准代码,是一种基于拉丁字母的一套电脑编码系统

这是ASCII的概念

众所周知

计算机中无论什么数据本质都是一段二进制数据

那么每个字符都会存在一个对应的二进制数据

具体用哪个数据表示某个字符,这个所有人都可以有自己的一套编码

但这时就会出现一个问题

当两个人用着不同的编码时便无法传达正确的信息

就比如我定义a为1,而你定义b为1

那么我向你传输信息'a'的时候,你收到的信息会变成b

这就非常尴尬

为了防止这样的事情产生,便需要大家都使用一套标准

ASCII便是这么一套国际标准。

说完ASCII

我们继续谈base64

首先我们前文说过,在原字符串有3的倍数个字符时结尾不会出现=

这一点的原因大概如下:

首先base64会将每三个字节转换为4个可见字符

由于一个字符占一个字节8个比特,而base64以6个比特为一组生成字符

所以此时base64编码后的字符串与原文所占比特皆为24

这时3个原字节刚好占base64的四个字符所以此时不需要=来进行填充

另外我之前提到过

一段base64码中只会出现1或2个=和不会出现1或5倍数个字符

这要根据之前提到的“一个字符占一个字节8个比特,而base64以6个比特为一组生成字符”来理解

我们将5写成(4+1)便很好理解了

由于3*8=6*4

所以4个字符可视为一组

而又于每个字符占8个比特

必然会出现至少两个字符

为何只会有1或2个=也同理

3.拓展,关于base32

base32,与base64同理,不过从6比特出一字节该为5比特出一字节

而同样,base32同样需要补足

需要补充到8位,即40个比特(5*8=8*5)

此时不会出现的字符个数为1或9的倍数

等号数量大于0小于6

理由与base64相同

注意,base32编码中只有大写A到Z和数字1到7

相较于base64

base32所占空间更大

我们可以做一个实验,将一个数据分别进行base64和base32编码

再看其所占内存便可

就拿之前用过的hi举例

base64
base32

很明显,在编码字符数相同时,base32所占空间大于base64所占空间

以上,便是我对于base64部分原理的理解及对于ASCII的理解

最后强调一点

本人并非专业人员,本文章仅是个人观点,如有疏漏或错误,请各位大佬指点。不喜轻喷,谢谢。

另:部分素材来自网络

(0)

相关推荐