为了账号安全,请及时绑定邮箱和手机立即绑定

Python:base64解码时忽略“错误填充”错误

Python:base64解码时忽略“错误填充”错误

哆啦的时光机 2019-10-17 10:12:28
我有一些base64编码的数据,即使其中存在填充错误,我也想将其转换回二进制。如果我用base64.decodestring(b64_string)会引发“填充错误”错误。还有另一种方法吗?更新:感谢您的所有反馈。老实说,提到的所有方法听起来都有些失败,所以我决定尝试使用openssl。以下命令可以有效地解决问题:openssl enc -d -base64 -in b64string -out binary_data
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

只需根据需要添加填充。但是,请注意迈克尔的警告。


b64_string += "=" * ((4 - len(b64_string) % 4) % 4) #ugh


查看完整回答
反对 回复 2019-10-17
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

“不正确的填充”不仅可以表示“缺少填充”,还可以表示(不信不信)“不正确的填充”。


如果建议的“添加填充”方法不起作用,请尝试删除一些尾随字节:


lens = len(strg)

lenx = lens - (lens % 4 if lens % 4 else 4)

try:

    result = base64.decodestring(strg[:lenx])

except etc

更新:摆弄空白或从结尾删除可能坏的字节的任何摆弄应该在删除任何空白之后进行,否则长度计算将被打乱。


如果您向我们展示了您需要恢复的数据的(简短)样本,那将是一个好主意。编辑您的问题,然后复制/粘贴的结果 print repr(sample)。


更新2:可能已经以url安全的方式完成了编码。在这种情况下,您将能够看到数据中的负号和下划线字符,并且应该能够通过使用以下命令对其进行解码base64.b64decode(strg, '-_')


如果您在数据中看不到减号和下划线字符,但是可以看到加号和斜杠字符,那么您还有其他问题,可能需要使用添加或删除技巧。


如果您在数据中看不到减号,下划线,加号和斜杠,则需要确定两个替代字符;否则,请参见表。他们将是[A-Za-z0-9]中没有的人。然后,您需要进行实验,以查看需要在哪个第二个参数中使用它们的顺序base64.b64decode()


更新3:如果您的数据是“公司机密”:

(a)您应该这样说

(b)我们可以探索理解问题的其他途径,这很可能与使用什么字符代替+和/使用编码字母,或其他格式或无关字符。


一种方法是检查数据中包含哪些非“标准”字符,例如


from collections import defaultdict

d = defaultdict(int)

import string

s = set(string.ascii_letters + string.digits)

for c in your_data:

   if c not in s:

      d[c] += 1

print d


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 1043 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信