3 回答

TA贡献1111条经验 获得超0个赞
只需根据需要添加填充。但是,请注意迈克尔的警告。
b64_string += "=" * ((4 - len(b64_string) % 4) % 4) #ugh

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
添加回答
举报