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的应用在需要网络通信的场景中有着非常广泛的应用场景,比如邮件附件和图片传输,htmlimg标签的src属性也可以是base64编码的图片,以及我们常用的各种证书use(paymentCertificate,sslcertificate)publickeyandprivatekey..Summarybase64是一种优秀的编码方式,解决了复杂的文件传输问题,因此被广泛应用于各种场景。关于base64的使用,你还需要知道以下几点:转码后的base64长度会发生变化,比源数据的长度长1/3左右。base64不具备加密特性,不适合加密场景。base64字符中会有+、/等字符,所以如果需要传递url参数,需要使用url编码,否则可能导致接收到的数据无法正常解密的情况。参考资料维基百科为什么我们使用Base64?base64编码有什么用?
