首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:在base64解码时忽略“不正确的填充”错误

Python:在base64解码时忽略“不正确的填充”错误
EN

Stack Overflow用户
提问于 2010-05-31 15:27:15
回答 16查看 298.2K关注 0票数 146

我有一些base64编码的数据,我想转换回二进制,即使其中有填充错误。如果我使用

代码语言:javascript
复制
base64.decodestring(b64_string)

它会引发“不正确的填充”错误。还有别的办法吗?

更新:感谢所有的反馈。老实说,上面提到的所有方法听起来都不太靠谱,所以我决定尝试一下openssl。以下命令很管用:

代码语言:javascript
复制
openssl enc -d -base64 -in b64string -out binary_data
EN

回答 16

Stack Overflow用户

发布于 2018-03-24 06:22:09

在解码之前,你似乎只需要在你的字节中添加填充。关于这个问题还有很多其他的答案,但我想指出的是(至少在Python3.x中) base64.b64decode将截断任何额外的填充,前提是首先有足够的填充。

所以,像这样的东西:b'abc='b'abc=='一样好(b'abc====='也一样)。

这意味着您只需添加所需的最大填充字符数-即两个(b'==')-and base64将截断任何不必要的字符。

这可以让你写下:

代码语言:javascript
复制
base64.b64decode(s + b'==')

这比以下内容简单:

代码语言:javascript
复制
base64.b64decode(s + b'=' * (-len(s) % 4))
票数 82
EN

Stack Overflow用户

发布于 2010-05-31 15:37:09

只需根据需要添加填充即可。不过,还是听从了迈克尔的警告。

代码语言:javascript
复制
b64_string += "=" * ((4 - len(b64_string) % 4) % 4) #ugh
票数 44
EN

Stack Overflow用户

发布于 2015-09-11 15:28:07

使用

代码语言:javascript
复制
string += '=' * (-len(string) % 4)  # restore stripped '='s

功劳归功于这里的某处评论。

代码语言:javascript
复制
>>> import base64

>>> enc = base64.b64encode('1')

>>> enc
>>> 'MQ=='

>>> base64.b64decode(enc)
>>> '1'

>>> enc = enc.rstrip('=')

>>> enc
>>> 'MQ'

>>> base64.b64decode(enc)
...
TypeError: Incorrect padding

>>> base64.b64decode(enc + '=' * (-len(enc) % 4))
>>> '1'

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

https://stackoverflow.com/questions/2941995

复制
相关文章

相似问题

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