“不正确的填充”不仅可以表示“缺少填充”,还可以表示(不信不信)“不正确的填充”。
如果建议的“添加填充”方法不起作用,请尝试删除一些尾随字节:
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]中没有的人。然后,您需要进行实验,以查看需要在第2个参数中使用它们的顺序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
base64.b64decode(strg, '-_')
?这是先验的,无需您费心提供任何示例数据,这是最可能解决您问题的Python解决方案。提出的“方法”是调试建议,由于提供的信息很少,因此必然“碰碰运气”。