3 回答

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個贊
只需根據(jù)需要添加填充。但是,請注意邁克爾的警告。
b64_string += "=" * ((4 - len(b64_string) % 4) % 4) #ugh

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個贊
“不正確的填充”不僅可以表示“缺少填充”,還可以表示(不信不信)“不正確的填充”。
如果建議的“添加填充”方法不起作用,請嘗試刪除一些尾隨字節(jié):
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
更新:擺弄空白或從結(jié)尾刪除可能壞的字節(jié)的任何擺弄應(yīng)該在刪除任何空白之后進(jìn)行,否則長度計(jì)算將被打亂。
如果您向我們展示了您需要恢復(fù)的數(shù)據(jù)的(簡短)樣本,那將是一個好主意。編輯您的問題,然后復(fù)制/粘貼的結(jié)果 print repr(sample)。
更新2:可能已經(jīng)以url安全的方式完成了編碼。在這種情況下,您將能夠看到數(shù)據(jù)中的負(fù)號和下劃線字符,并且應(yīng)該能夠通過使用以下命令對其進(jìn)行解碼base64.b64decode(strg, '-_')
如果您在數(shù)據(jù)中看不到減號和下劃線字符,但是可以看到加號和斜杠字符,那么您還有其他問題,可能需要使用添加或刪除技巧。
如果您在數(shù)據(jù)中看不到減號,下劃線,加號和斜杠,則需要確定兩個替代字符;否則,請參見表。他們將是[A-Za-z0-9]中沒有的人。然后,您需要進(jìn)行實(shí)驗(yàn),以查看需要在哪個第二個參數(shù)中使用它們的順序base64.b64decode()
更新3:如果您的數(shù)據(jù)是“公司機(jī)密”:
(a)您應(yīng)該這樣說
(b)我們可以探索理解問題的其他途徑,這很可能與使用什么字符代替+和/使用編碼字母,或其他格式或無關(guān)字符。
一種方法是檢查數(shù)據(jù)中包含哪些非“標(biāo)準(zhǔn)”字符,例如
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
添加回答
舉報(bào)