Base64是什么?
Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将 byte
数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。
值得注意的是Base64不是加密算法,其仅仅是一种编码方式,算法也是公开的,所以不能依赖它进行加密。
为什么叫Base64?
因为它是基于(Base)64个字符的一种编码方式。使用其编码后的文本只包含64个ASCII码字符(偶尔加一个填充字符=
),如下所示:
Base64使用到的64个字符:
A-Z
26个a-z
26个0-9
10个+
1个/
1个
下图是Base64码表,可以看到从0到63的每个数字都对应一个上面的一个字符。
Base64就是为了解决各系统以及传输协议中二进制不兼容的问题而生的。
使用场景
- 证书
- 电子邮件的附件,因为附件往往有不可见字符
- xml 中如果像嵌入另外一个 xml 文件,直接嵌入,往往 xml 标签就乱套了, 不容易解析,因此,需要把 xml 编译成字节数组的字符串,编译成可见字符。
- 网页中的一些小图片,可以直接以 base64 编码的方式嵌入,不用再链接请求消耗网络资源。
- 较老的纯文本协议 SMTP ,这些文本偶尔传输一个文件时,需要用 base64
使用 Base64 进行编码,大致可以分为 4 步:
- 将原始数据每三个字节作为一组,每个字节是8个bit,所以一共是 24 个 bit
- 将 24 个 bit 分为四组,每组 6 个 bit
- 在每组前面加补 00,将其补全成四组8个bit
到此步,原生数据的3个字节已经变成4个字节了,增大了将近30%
- 根据Base64码表得到扩展后每个字节的对应符号(见上图)
Base64字符串末尾的=
是什么
有时我们会在Base64字符末尾会看到=
,有时1个,有时2个,这是为啥?
通过上面的我们知道了Base64编码过程是3个字符一组的进行,如果原文长度不是3的倍数怎么办呢? 例如我们的原文为Ma
,它不够3个,那么只能在编码后的字符串中补=
了。缺一个字符补一个,缺两个补两个即可,所以有时候你会看见base64字符串结尾有1个或者2个=
。
Base64 DataURI格式
有时你会发现web页面传给你的base64字符串前面有类似下面的东东。
data:image/jpeg;base64, /9j/4AA...
这是DataURI,大部分浏览器支持直接打开这类二进制数据,但是我们要格外注意,如果你只是想要真实的Base64内容就需要取,
后边的内容
文章来源: