base64编码是为了保证消息传输过程中内容的完整性,而对消息的安全性的作用不大,且不完全符合柯克霍夫原则,因此不算是一种加解密方式。下面由base64的来历,实现几方面来介绍。
一、为什么是base64
说起base64,就需要提下Email传输。最早的Email只被允许传输ascii字符,ascii字符只有7位,因此,Email能够传输的内容很有限。在某些邮件主机上,由于只允许传输ascii字符,因此可能会截掉字符的最高位,将其置为0,这样中文字符在传输过程中将出现乱码的情况。为了扩展Email的传输内容,使其可以传输更多的内容,特提出了MIME编码规范。而base64编码是实现MIME规范的一种实现方式(另一种编码方式是quoted-printable)。
base64编码使用6位表示一个字符,使其可以被当作ascii字符解析,因此可以在全球所有的计算机上使用,而且编码后的值对消息有一定的加密作用,因此常被用于网络传输中。此外,在网络中对图片文件进行base64编码可以减少http请求次数。例如,将编码后的图片文件放在css文件中,当拿到css文件时,即可拿到这个图片文件,省掉了获取图片的http请求。这可用于在获取到真正图片前,填充图片区域。
这里再提下base64和UTF-8编码在网络传输方面的区别。UTF-8(8-bit Unicode Transformation Format)编码,是用于传输Unicode码值的一种编码方式。由于Unicode码值较长,因此可以使用UTF-8编码来提高Unicode消息的传输效率,而base64是为了支持某些只识别ascii字符的系统。一般情况下,在网络传输过程中,对一段需要传输的Unicode内容,需要先进行UTF-8编码,减少消息长度,然后对编码后的内容进行base64编码,使其可以任意网络系统中传输。
二、base64的实现
base64将6bit作为一个字节,因此base64可以有64种码值,包含1-9,a-z,A-Z,以及“+”、“/”,还有“=”作为填充位。码值如下:
base64编码过程如下:
- 将3个字节作为一组进行编码
- 3个字节对应24bit,因此需要4个base64的字节
- 若消息序列长度不是3的倍数,最后一组不足3字节,用0补齐
- 将8bit的字节转换为6bit的字节
- 将6bit的字节首部添加两个0,转为8bit字节
- 对转换后的字节进行base64编码
如对mzwu进行编码(参考http://www.jb51.net/article/29799.htm):
如上,二进制长度为4字节,因此需要填充两位,最终的base64码值有两位“=”。
base64简介
最新推荐文章于 2024-05-28 09:57:38 发布