使用 decode64 解码不正确的填充时出错,存在填充?

Error decoding incorrect paddling with decode64, with padding present?

使用我正在使用的代码,每次编码消息的数据上有一个 "?" 时,我都会返回错误 "Incorrect Padding"。当使用在线解码器时,我会得到正确的下面 value1value2 的值,但是对于应该有 "?"value2 我得到了一个例外。

密码是:

value1 = "Y29udGludWENCg=="
expected1 = b'continua\r\n'
value2 = "Y29udGludWE_DQo="
expected2 = b'continua?\r\n'

data1 = base64.b64decode(value1)
assert data1 == expected1
data2 = base64.b64decode(value2)
assert data2 == expected2

解码value2抛出binascii.Error: Incorrect padding异常,但数据有正确的填充量(value2的长度是4的倍数)。

您没有标准的 Base64 数据,您有 URL-安全 base64 数据。

Base64 通常使用字母、数字和 /+ 字符,但后两者在 URL 中具有特殊含义,因此使用替代 Base64url encoding而是使用 -_ 字符。

使用base64.urlsafe_b64decode() function解码这些字符串:

data2 = base64.urlsafe_b64decode(value2)

演示:

>>> import base64
>>> value2 = "Y29udGludWE_DQo="
>>> base64.urlsafe_b64decode(value2)
b'continua?\r\n'