base64编码

Posted by Ann on November 19, 2021

参考博客

什么是base64编码?

Base-64编码是一种获取二进制数据并将其转换为文本的方法,其使用64个字符来对任意数据进行编码,同理有Base32、Base16编码。标准Base64编码使用的64个字符为:英文字母大小写,数字,+,/ 这64种。

假设我们要对 Hello! 进行Base64编码,按照ASCII表,其转换过程如下图所示:

可知 Hello! 的Base64编码结果为 SGVsbG8h ,原始字符串长度为6个字符,编码后长度为8个字符,每3个原始字符经Base64编码成4个字符,编码前后长度比4/3,这个长度比很重要 - 比原始字符串长度短,则需要使用更大的编码字符集,这并不我们想要的;长度比越大,则需要传输越多的字符,传输时间越长。Base64应用广泛的原因是在字符集大小与长度比之间取得一个较好的平衡,适用于各种场景。

如果原始字符串长度不能被3整除,使用0值来补充原始字符串。

base64使用场景

如介绍中所说,base64把二进制数字转化成了指定字符集的形式,这种转化显然是可逆的。它的应用场景如下:

  • 一些会把二进制误译成其他机器指令的场景
  • ASCII编码的场景。如http,html内嵌图片,SMTP(邮件传输协议)

urlEncode

当打算于url中使用base64编码时,就发生问题了,因为编码中包含了+跟/,会造成url路径错误。
针对这个问题,Base64有一个变种,通常会说是URL and Filename Safe Alphabet,符合RFC4648, Section 5.规范,
这个规范将"+"和"/"替换成"-"和"_"并移除最后的"="