base64.decode:填充前编码无效

问题描述

我正在处理一个颤振项目,目前我尝试使用 base64.decode() 方法解码的一些字符串出现错误。我创建了一个简短的 dart 代码,它可以重现我在使用特定字符串时遇到的问题:

import 'dart:convert';

void main() {
  final message = 'RU5UUkVHQUdSQVRJU1==';
  print(utf8.decode(base64.decode(message)));
}

我收到以下错误消息:

Uncaught Error: FormatException: Invalid encoding before padding (at character 19)
RU5UUkVHQUdSQVRJU1==

我试过用 JavaScript 解码相同的字符串,效果很好。如果有人能解释为什么我会收到此错误,并可能向我展示解决方案,我会很高兴。谢谢。

解决方法

Base64 编码将二进制数据分成 3 个完整字节的 6 位段,并将这些段表示为 ASCII 标准中的可打印字符。它基本上分两步完成。

第一步是将二进制字符串分解为 6 ​​位块。 Base64 仅使用 6 位(对应于 2^6 = 64 个字符)来确保编码数据可打印和人类可读。没有使用 ASCII 中可用的任何特殊字符。

这 64 个字符(因此得名 Base64)是 10 个数字、26 个小写字符、26 个大写字符以及加号 (+) 和正斜杠 (/)。还有一个称为填充的第 65 个字符,它是等号 (=)。当二进制数据的最后一段不包含完整的 6 位时使用此字符

所以 RU5UUkVHQUdSQVRJU1== 不遵循编码模式。