3. 实现差异 (Implementation Discrepancies)
Base encoding 的实现差异主要集中在 line feed, padding, 非 alphabet character, alphabet selection 和 canonical encoding.
3.1 编码数据中的换行 (Line Feeds in Encoded Data)
除非引用本规范的上层规范明确要求, encoder 不得向 encoded data 添加 line feed. MIME 的 76 character 换行和 PEM 的 64 character 换行是特定规范的要求, 不能自动套用到所有 base64.
3.2 编码数据填充 (Padding of Encoded Data)
在一般情况下, encoder 必须在 encoded data 末尾加入适当 pad character, 除非引用本规范的上层规范明确规定不使用 padding.
3.3 非 alphabet 字符解释 (Interpretation of Non-Alphabet Characters)
除非上层规范另有规定, decoder 必须拒绝包含 base alphabet 以外 character 的 encoded data. 这避免 covert channel 和解析差异. 上层规范可以选择忽略 whitespace 或其他非 alphabet character, 但必须明确说明.
3.4 选择 alphabet (Choosing the Alphabet)
不同场景可能需要不同 alphabet. 例如 + 和 / 在 URL 或 filename 中可能不方便, 因此本文档定义 URL and Filename Safe Base64 alphabet.
3.5 规范编码 (Canonical Encoding)
为保证 canonical representation, padding bit 必须设置为 zero. 如果 padding bit 非零, 同一 binary data 可能有多个 textual encoding, 从而破坏规范化比较.