Ascii编码

image-20230330154217204

image-20230330154256000

Base64编码

标准Base64的码表如下:

image-20230713164936697

为了适应网络传输,有些地方将 +/ 字符 替换成 -_ 字符(现实中还存在许多为适应不同场景,自定义各种可见字符来代替+/)。

填充

base64编码时将ascii字符串每3个一组编码成4个base64字符,当最后的ascii字符不足3个时,可以填充特定位(0值)来促成编码,同时得到的base64字符串末尾补上=字符。这个=字符只可能出现在末尾,出现的时候只可能为一个或者二个。例如:

image-20240124163851698

image-20240124163903837

Base32编码

Base32编码是一种将二进制数据转换为文本格式的编码方式。它使用32个可打印字符(包括字母A-Z和数字2-7),这些字符不会在数据传输过程中引起混淆,并且可以方便地由人类使用和由计算机处理。Base32编码的目的是在存储或传输系统中编码不受限制的二进制文件,只允许某种形式的数据(如纯文本)。‌

  1. 数据分组‌:将输入数据按照每5个字节为一组进行处理。
  2. 二进制转换‌:将每个字节的二进制值(不足8比特高位补0)串联起来,然后按照5比特一组进行切分。
  3. 查找索引表‌:将每组二进制值转换成十进制数,通过查找Base32索引表获取对应的可打印字符。
  4. 填充‌:如果数据的总位数不是40的倍数,使用“=”字符进行填充,确保编码后的字符串长度是8的倍数。‌

RFC4648编码字母表如下:

image-20241102193706960

当然还有很多变种,比如使用了Crockford的Base32。该字母表不包括字母I,L,O和U,以避免混淆和滥用。这32个字符按顺序是:

1
2
# Crockford的Base32
0123456789ABCDEFGHJKMNPQRSTVWXYZ

GUID/UUID/CUID/ULID等随机数编码方案

参考阅读:

https://zhuanlan.zhihu.com/p/712731404

(完)