首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python base32数据解码

Python base32数据解码
EN

Stack Overflow用户
提问于 2015-06-10 09:57:38
回答 2查看 8.8K关注 0票数 0

我不明白为什么

代码语言:javascript
复制
import base64
base64.b32decode('siddh===', casefold=True);

工作,但

代码语言:javascript
复制
base64.b32decode('siddha==', casefold=True);

抛出

代码语言:javascript
复制
TypeError: Incorrect padding
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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位输入组的标准之外。

票数 2
EN

Stack Overflow用户

发布于 2018-04-16 16:26:47

还请注意,Base32的字符集是大写字母A-Z2-7= / RFC 4648 (这比RFC 3548更新)。还有一个名为Base32 32-十六进制的变体,它使用'0-9A-V=‘,所以Base32解码器不应该接受小写字母。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30753046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档