【问题标题】:"chunking" in base64 encoded stringbase64 编码字符串中的“分块”
【发布时间】:2018-06-29 01:37:56
【问题描述】:

一些较旧的 Base64 编码器为编码字符串中的每 76 个字符添加回车符“\r”和/或换行符“\n”,称为“分块”。原因是为了无法处理较长行的编辑器。

问题是:“\r”和“\n”都不是base64代码页中的基本字符之一;这不会使整个编码字符串对 base64 无效吗?

请注意,我不是在问解码器是否会容忍像 \r 这样的“空白”字符;我在问为什么认为将空白字符添加到 base64 字符串中是可以的,而显然这些空白字符不在 base64 代码页中。

感谢您对此的建议...

【问题讨论】:

  • 我看过那个提问环节,但不是同一个问题。我在问为什么在 base64 代码页之外添加字符,例如“\r”,被认为可以?
  • 取决于解码器的实现。大多数解码器会跳过特殊字符,如 \r 或空格
  • 谢谢,但我不是在问解码器是否会容忍像 \r; 这样的“空白”字符。我在问为什么将空白字符添加到 base64 字符串中是可以的,而显然这些空白字符不在 base64 代码页中。
  • 认为没问题,因为它解决了需要解决的问题。

标签: java base64 codec


【解决方案1】:

根据Base64 javadoc,Base64 变体适用于 MIME。

也就是说,必须知道使用区域。

幸运的是 Base64 类可以做所有事情。

  • 基本

    使用 RFC 4648 和 RFC 2045 的表 1 中指定的“Base64 字母”进行编码和解码操作。编码器不添加任何换行符(行分隔符)。解码器拒绝包含 base64 字母表之外的字符的数据。

  • 网址和文件名安全

    使用 RFC 4648 的表 2 中指定的“URL 和文件名安全 Base64 字母”进行编码和解码。编码器不添加任何换行符(行分隔符)。解码器拒绝包含 base64 字母表之外的字符的数据。

  • MIME

    使用 RFC 2045 的表 1 中指定的“Base64 字母”进行编码和解码操作。编码输出必须以每行不超过 76 个字符的形式表示,并使用回车“\r”紧跟换行“\n”作为行分隔符。没有行分隔符添加到编码输出的末尾。在解码操作中忽略所有未在 base64 字母表中找到的行分隔符或其他字符。

【讨论】:

  • 感谢 Joop 提供的信息,尤其是 RFC 2045 规范真的很有帮助。
【解决方案2】:

在阅读了 RFC 2045 规范(即 Joop 帖子中的 MIME 部分)后,我意识到我之前的误解:RFC 2045 字符表的代码页并不是全部。

此外,规范清楚地说明了编码器应如何提供除代码页字符之外的行分隔符,以及解码器应如何处理这些额外的字符,这正是我所缺少的。这就是为什么这些行字符符合规范的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2012-11-13
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多