我在这里假设所讨论的256 位和512 位数字分别使用 32 或 64 字节进行编码(即没有丢弃前导零,没有额外的位来防止有符号/无符号问题,没有 ASN.1 BER 编码头, ...)。
Base64 对每个字节三元组使用 4 个字符,每个字符代表 6 位数据:
byte #1 | byte #2 | byte #3
bit 7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0
变成
bit 5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0
char #1 | char #2 | char #3 | char #4
哪个 char 用于哪个 6 元组位是通过表格指定的,参见例如Wikipedia 文章。
因此,在256 位数字的情况下,必须对 32 个字节进行编码,即使用 11 个四位字符,其中最后一个仅编码 2 而不是最大的 3 个字节,即只有 16 位数据。因此,最后一个字符(没有数据)是 a =
,倒数第二个字符(只有前 4 位的数据)只能是一个代表 6 个元组的位和两个最低位为0,即你列举的字符。
在512 位数字的情况下,必须编码 64 个字节,即使用 22 个四位字符,最后一个仅编码 1 而不是最大的 3 个字节,即只有 8 位数据。因此,最后两个字符(没有数据)都是=
,而第二个字符(只有前 2 位的数据)只能是一个表示 6 元组的位,最低的 4 位是0,即字符AQgw
。
不过,如上所述,我对数字的编码做了一些假设......