【发布时间】:2017-06-03 19:30:54
【问题描述】:
在Python 3.5 中,base64 模块有一个方法 standard_b64decode() 用于从 base64 解码字符串,它返回一个 bytes 对象。
当我运行base64.standard_b64decode("wc==") 时,输出为b\xc1。当你对"\xc1"进行base64编码时,你得到"wQ=="。解码功能似乎有错误。实际上,我认为 "wc==" 是一个无效的 base64 编码字符串,理由如下:
wc==以==结尾,这意味着它是从单个输入字节生成的。正则base64字母表中
'w'和'c'的对应值分别为48和28,意思是它们的6位表示分别为110000和@987654338 @。-
连接这些,前 8 位是
11000001,即\xc1,但其余位 (1100) 非零,因此不可能由执行的填充过程产生在 base64 编码期间,因为它只会附加值为0的位,这意味着这些额外的1位不能通过有效的 base64 编码产生 -> 该字符串不是有效的 base64 编码字符串。
当第二个字符的最后 4 位中的任何一个是 1 时,我认为对于以 == 结尾的任何 4 个字符的 base64 编码块都是如此。
我非常确信这是正确的,但我的经验不如 Python 开发人员。
任何人都可以确认上述内容,或者解释为什么它是错误的,如果确实如此的话?
【问题讨论】:
-
我这边也确认了
-
谢谢 - 很高兴知道我不会发疯(或者至少我不是一个人发疯)。我在这里总结了错误报告:bugs.python.org/issue30564