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

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


base64.decodestring(b64_string)

会引发“填充错误”错误。还有另一种方法吗?


更新:感谢您的所有反馈。老实说,提到的所有方法听起来都有些失败,所以我决定尝试使用openssl。以下命令可以有效地解决问题:


openssl enc -d -base64 -in b64string -out binary_data


哆啦的时光机
浏览 1052回答 3
3回答

catspeake

只需根据需要添加填充。但是,请注意迈克尔的警告。b64_string += "=" * ((4 - len(b64_string) % 4) % 4) #ugh

收到一只叮咚

“不正确的填充”不仅可以表示“缺少填充”,还可以表示(不信不信)“不正确的填充”。如果建议的“添加填充”方法不起作用,请尝试删除一些尾随字节: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 defaultdictd = defaultdict(int)import strings = set(string.ascii_letters + string.digits)for c in your_data:   if c not in s:      d[c] += 1print d
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python