我想检查字符串是否是用python编码的base64。由于内置模块非常宽容,我尝试了以下方法
s = b'111='
b64encode(b64decode(s)) == s
令我惊讶的是,它返回了False
。事实上,b64encode(b64decode(s))
回报b'110='
.我希望它会返回True
,因为我的印象是'111='
是一个有效的 base64 字符串。
我的 python 版本是 3.6.4
$ python --version
Python 3.6.4
这是为什么呢?有人可以解释一下吗?
由于"0"和"1"仅在最后4位不同(并且编码有4个填充位(,因此两者都是明文的有效编码。 但是,b64encode()
只会在那里使用"0"进行编码。
为了保持健壮性,您需要计算编码文本应该有多少填充位和字节,然后只比较有效字节和位。