baseurl64 缓冲区解码

baseurl64 buffer decoding

有人可以解释这种行为吗?

Buffer.from('5d9RAjZ2GCob-86_Ql', 'base64url').toString('base64url')

// 5d9RAjZ2GCob-86_Qg

请仔细看最后一个字符l - g

您的字符串长度为 18 个字符,每个字符编码 6 位,这意味着前 16 个字符代表 96 位(12 字节),最后两个代表一个字节加上 4 个未使用的位。此处只有最后一个字符的前两位有意义。 g是100000,l是100101。由于没有使用最后4个字符,所以g只是1 0这两个位的首选。

因此,对于 gv 范围内的任何字符,当您将其转换回 Base64Url 时,您将得到一个 g。 参见 https://en.wikipedia.org/wiki/Base64#Base64_table_from_RFC_4648