Base64是一种基于64个可打印字符来表示二进制数据的表示方法。因为2的6次方等于64,因此每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节可表示4个可打印字符。它可用来做为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不一样的系统中而不一样。一些如uuencode的其余编码方法,和以后binhex的版本使用不一样的64字符集来表明6个二进制数字,可是它们不叫Base64。html
计算机以二进制形式(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 个 =。)。 服务器
以 helloworld 为例转换过程以下:
通过上述步骤转后字符串为:aGVsbG93d29ybGQ=,到此一个完整的转码例子便完成了。网络
base64 在须要网络通信的场景下,有着很是普遍的应用场景,好比邮件的附件和图象传输,html img
标签的 src 属性也能够是 base64 编码的图片,还有咱们经常使用的各种证书(支付证书,ssl 证书)的公钥和私钥..框架
base64 是一个很优秀的编码方式,他很好的解决了复杂文件在传输中的问题,也所以被普遍的应用在各类场景之中。关于 base64 的使用,你还须要知道以下几点:编码
维基百科
Why do we use Base64?
What is base 64 encoding used for?加密