Base64是一种基于64个可打印字符来示意二进制数据的示意办法。因为2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节可示意4个可打印字符。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包含字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的零碎中而不同。一些如uuencode的其余编码方法,和之后binhex的版本应用不同的64字符集来代表6个二进制数字,然而它们不叫Base64。
起因
计算机以二进制模式(0和1)进行通信,然而人们通常心愿与更丰盛的表单数据(例如文本或图像)进行通信。 为了在计算机之间传输此数据,首先必须将其编码为0和1,而后发送,而后再次解码。 以文本为例-有许多不同的办法能够执行此编码。 如果咱们都能够批准一个编码,那就简略得多了,但可怜的是事实并非如此。
最后创立了许多不同的编码(例如Baudot码),每个字符应用不同数量的位,直到最终ASCII成为每个字符7位的规范。 然而,大多数计算机将二进制数据存储在每个字节由8位组成的字节中,因而ASCII不适宜传输此类数据。 有些零碎甚至会擦除最高位。 此外,跨零碎的行尾编码的差别意味着有时还会批改ASCII字符10和13。
为了解决这些问题,引入了Base64编码。 这样,您就能够将框架字节编码为已知能够平安发送而不损坏的字节(ASCII字母数字字符和几个符号)。 毛病是应用Base64编码音讯会减少其长度-每3个字节的数据会编码为4个ASCII字符。
为了牢靠地发送文本,您能够首先应用所选的文本编码(例如UTF-8)将其编码为字节,而后再对Base64进行编码,将生成的二进制数据编码为可平安发送为ASCII的文本字符串。 接收者将不得不逆转此过程以复原原始音讯。 当然,这要求接收者晓得应用了哪种编码,并且该信息通常须要独自发送。
从历史上看,它已用于对电子邮件中的二进制数据进行编码,其中电子邮件服务器可能会批改行尾。 一个更古代的示例是应用Base64编码将图像数据间接嵌入HTML源代码中。 在这里,有必要对数据进行编码,以防止像“ <”和“>”这样的字符被解释为标签。
原理
base64 加密原理,是将待转换字符串转换为二进制并以三个字为一组(数据有余用 0 补足),每 6 位为一个索引组转换为十进制索引,通过索引在 base64 索引表中找到对应的字符作为编码后的字符(若原数据长度不是 3 的倍数时则对 3 取余余数为 1,则在编码后果后加2个=;若余数为 2,则在编码后果后加 1 个 =。)。
base64 转换实例
以 helloworld 为例转换过程如下:
通过上述步骤转后字符串为:aGVsbG93d29ybGQ=,到此一个残缺的转码例子便实现了。
利用
base64 在须要网络通讯的场景下,有着十分宽泛的利用场景,比方邮件的附件和图象传输,html img
标签的 src 属性也能够是 base64 编码的图片,还有咱们罕用的各类证书(领取证书,ssl 证书)的公钥和私钥..
Summary
base64 是一个很优良的编码方式,他很好的解决了简单文件在传输中的问题,也因而被宽泛的利用在各种场景之中。对于 base64 的应用,你还须要晓得如下几点:
- base64 转码后的长度会有所变动,会比源数据的长度多出大概 1/3
- base64 不具备加密个性,因而他不适用于加密的场景
- 因为 base64 字符中会有 +,/ 等字符,因而如果须要 url 传参的时候留神须要应用 URL 编码一下,否则有可能会导致承受到的数据无奈失常解密的状况
References
维基百科
Why do we use Base64?
What is base 64 encoding used for?