base64或base32编码(RFC 4648)中位组大小的重要性是什么?

时间:2015-10-05 16:19:22

标签: math encoding

为什么他们会选择分别为base 64和base 32使用24位或40位(非常奇怪的)位组/字大小。

具体来说,有人可以解释为什么最不常见的倍数很重要吗?

lcm(log2(64), 8) = 24
lcm(log2(32), 8) = 40

1 个答案:

答案 0 :(得分:1)

Base 64编码基本上涉及获取8位字节流并将其转换为可由可打印ASCII字符表示的6位字符流。

一次取一个字节意味着你有一个6位字符,剩下2位。

取两个字节(16位)意味着你有两个6位字符,剩下4位。

取3个字节(24位)意味着你有三个字节可以精确地分成4个字符而没有剩下的位。

因此lcm的字节大小和字符大小自然就是将输入分成的大小。

选择6位字符,因为这是您可以使用所有值的可打印ascii字符的最大尺寸。如果你最多7位,你需要非打印字符。

base 32的参数类似,但现在你使用的是5位字符,所以8和5的lcm是字大小。此字符大小允许不区分大小写的可打印字符,6位字符需要区分大小写。