我不明白为什么
import base64
base64.b32decode('siddh===', casefold=True);工作,但
base64.b32decode('siddha==', casefold=True);抛出
TypeError: Incorrect padding发布于 2015-06-10 10:15:37
python base64模块遵循RFC 3548。对于base32编码,
数据末尾的填充使用"=“字符执行。由于所有的基32输入都是一个八进制整数,因此只能出现以下情况:(1)编码输入的最终量程是40位的整数倍数;这里,编码输出的最终单位将是不带"=“填充的8个字符的整数倍数;(2)编码输入的最终量程正好是8位;在这里,编码输出的最终单位是两个字符,然后是6个填充字符,(3)编码输入的最终数量正好是16位;在这里,编码输出的最终单位是四个字符,后面是四个"=“填充字符,(4)编码输入的最终量正好是24位;在这里,编码输出的最终单位是五个字符,后面是三个"=”填充字符,或者(5)编码输入的最终量程正好是32位;在这里,编码输出的最后一个单位是七个字符,一个"=“填充字符。
您可以看到,RFC 3548 base32编码没有有效的大小写,这将导致6个字符和两个填充字符。
五个字符给你的总共25位,所以它是足够编码三个字节与一个额外的位。六个字符将给出30位的总数,这仍然不足以容纳四个字节。有了7个字符,就可以得到35位,这就足够容纳4个字节了。由于六个字符在编码一个整数字节数方面不比五个字符好,因此它被排除在包含填充在内的最后填充40位输入组的标准之外。
https://stackoverflow.com/questions/30753046
复制相似问题