为什么在base64中使用二进制数字64而不是整个ASCII集?

时间:2019-06-20 19:08:05

标签: encoding character-encoding base64 character ascii

我试图理解为什么我们要使用Base64将二进制数据转换为ASCII字符,而不是直接将其直接转换为ASCII。在我看到的每一次Base64计算中,您要么以ASCII字符开始,要么以二进制数据开始,在最终将其转换为Base64的过程中,该二进制数据被转换为ASCII。

我的问题是:为什么不只将其保留为ASCII,而不是将其转换为Base64子集?

我已经阅读了关于Stackoverflow的所有相关问题,尽管我发现了很多有用的信息,但这是我仍然无法解决的部分问题。

1 个答案:

答案 0 :(得分:0)

有几个原因。我认为最重要的几个原因是:

  • 64是一个很好的数字,它需要较少的计算(实际上只是移位)即可将字节转换为base64和反数。没有乘法或除法。简单,快速,尤其是在不增加邮件服务器负担的情况下。计算所需的输出缓冲区也很容易。

  • 选择安全套。并非ASCII或ISO中的所有字符都是安全的。某些国家/地区更改了$&~。并非所有字符集都具有{。 ASCII更改了几个字符的定义(例如@位置)。应允许使用空格(但在语义之外),控制字符应相同。不要假定ASCII在每台计算机或邮件服务器上都可用。实际上,ISO C 1990版本支持不带所有ASCII字符的计算机。

  • 它不应与应该在其中使用的其他定界符(电子邮件标头,URL等)相干扰,因此请不要使用引号字符,而不要使用:。不幸的是,网络使用/=,但是由于有许多免费字符,因此解决问题很简单,而无需重新设计所有字符。