我想检查一下字符串是否是在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)
因为" 0"和" 1"两者仅在最后4位中不同(并且编码具有4个填充位),两者都是明文的有效编码。但是,b64encode()
只能使用" 0"那里。
为了保持健壮,您需要计算编码文本应该具有多少填充位和字节,然后只比较有效字节和位。