为什么他们会选择分别为base 64和base 32使用24位或40位(非常奇怪的)位组/字大小。
具体来说,有人可以解释为什么最不常见的倍数很重要吗?
lcm(log2(64), 8) = 24
lcm(log2(32), 8) = 40
答案 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位字符需要区分大小写。