【问题标题】:MIME base64 encoding ambiguity in rfc2045rfc2045 中的 MIME base64 编码歧义
【发布时间】:2019-04-26 19:33:45
【问题描述】:

根据 rfc2045 中指定的 MIME base64 编码,base64 编码的数据必须拆分为最多 76 个字符的行。

解码时,所有不属于base64字母的字符都必须被忽略。

我们如何确定 MIME base64 编码数据的结尾?

【问题讨论】:

    标签: base64 mime


    【解决方案1】:

    当您找到 base64 编码对象的开头时,应该始终可以在不解码的情况下找到结尾。例子:

    • 您可能有一封顶级编码为 base64 的电子邮件。在这种情况下,base64 内容的结尾就是主体的结尾。正文的末尾不是由任何内部结构识别的,而是由 SMTP DATA 末尾的唯一 . 识别。
    • 如果您从 mbox 文件中读取电子邮件,而不是通过 SMTP 接收,则 mbox 格式负责告诉您邮件的结尾在哪里。
    • 如果您有一个包含一个部分 base64 的多部分电子邮件正文,您可以先扫描多部分边界以找到正文部分的结尾,然后将整个正文部分传递给 base64 解码器。
    • 同样,如果您有一个带有 base64 的 RFC2047 编码的标头,您可以先找到终止的 =?,然后将编码部分传递给 base64 解码器。

    由于在base64解码开始之前已经识别了终止符,解码器永远不会看到终止符,因此“不属于base64字母表的字符”规则不相关。

    为了提高效率,可以将查找 base64 数据结尾和解码的 2 个步骤组合成一个循环输入。但从概念上讲,它们是分开的。

    【讨论】:

    • 这是我的预期,但是扫描base64编码数据以定位部分边界以确定base64编码长度的效率很低。
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2015-04-06
    • 2011-10-03
    相关资源
    最近更新 更多