你真的了解 Base64 吗
说 Base64 前先简单说一下 Byte 和 bit 的区别
Byte
:字节。数据存储的基本单位。比如移动硬盘 1T,单位就是 Byte。
bit
:比特。又叫位。一个位要么是 0 要么是 1。数据传输的单位。比如家里的宽带是 100M,下载速度并没有达到 100M,一般都是 12-13M 。因为需要使用 100/8
1Byte = 8bit
上面这幅图,一个英文字母其实就占一个字节。打印下这个字节,发现就是这个字符对应的 Ascii 码。然后把这个字节转换成比特,发现正好是 8 位。
如果是中文字符的话,在 UTF-8 编码格式下,一个中文字符占 3 个字节。同样的,如上图所示,我把这个中文字符转换成字节数组,就可以知道这个字节数组的长度,发现是 3。
总结下:
根据编码格式不一样,一个中文汉字对应的字节也不一样。
如果是 UTF-8,一个中文对应的是 3 个字节。
如果是 GBK ,一个中文对应的是 2 个字节
下面来正式介绍 Base64
1、先说为什么需要 Base64 编码?
Base64 其实最早是用在邮件传输协议中的,因为邮件传输协议只支持 Ascii 字符传递,所以如果你要传输像图片、视频等这类二进制文件是无法实现的。
这时候你就可以使用 Base64 对二进制文件内容进行编码,编码成只包含 Ascii 字符的内容,这样就可以传输了。
2、Base64 介绍
1)、首先说 Base64 不是加密算法,很多人把 Base64 误以为是一种加密算法,它其实可以说是一种可读性算法。
2)、Base64 它的目的不是为了保护我们的数据,而是为了提高可读性
3)、Base64 是由 64 个字符组成的,大写的 A-Z
,小写的 a-z
,数字 0-9
,+
和 /
(你发现这几个加起来正好 64 个字符,所以叫 Base64)
3、Base64 的编码过程
假设你要传输的数据是 3400a9 ,现在使用 Base64 对这个数据进行编码,会经过下面几个步骤:
1、首先将待转换的数据进行切分,每 3 个字节分为一组,1 个字节 8 位,所以总共 24 位。
2、对切分后的数据进行重组, 24 位重组成 4 组,这样每组就 6 位。
3、对重组后的数据进行处理,一个字节应该是 8 位,缺少 2 位,在高位进行补齐,高位补 0。构成每组 8 位。
4、根据 base64 编码表,获取相应的编码值。
4、Base64 补等号规则
3个字节是一组,当字节不够的时候,需要使用 = 进行补齐
版权声明: 本文为 InfoQ 作者【hepingfly】的原创文章。
原文链接:【http://xie.infoq.cn/article/2a2d029ede7baf084b96ded33】。文章转载请联系作者。
评论