"Padding yang salah" tidak hanya berarti "padding yang hilang" tetapi juga (percaya atau tidak) "padding yang salah".
Jika metode "menambahkan padding" yang disarankan tidak berhasil, coba hapus beberapa byte tambahan:
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
Pembaruan: Setiap mengutak-atik menambahkan padding atau menghapus byte yang mungkin buruk dari akhir harus dilakukan SETELAH menghapus spasi, jika tidak perhitungan panjang akan mengecewakan.
Ada baiknya jika Anda menunjukkan contoh (singkat) data yang perlu Anda pulihkan. Edit pertanyaan Anda dan salin / tempel hasil dari print repr(sample)
.
Pembaruan 2: Ada kemungkinan bahwa pengkodean telah dilakukan dengan cara yang aman untuk url. Jika demikian, Anda akan dapat melihat karakter minus dan garis bawah dalam data Anda, dan Anda harus dapat memecahkan kode dengan menggunakanbase64.b64decode(strg, '-_')
Jika Anda tidak dapat melihat karakter minus dan garis bawah dalam data Anda, tetapi dapat melihat karakter plus dan slash, maka Anda memiliki masalah lain, dan mungkin memerlukan trik add-padding atau remove-cruft.
Jika Anda tidak dapat melihat minus, garis bawah, plus dan garis miring di data Anda, maka Anda perlu menentukan dua karakter alternatif; mereka akan menjadi orang-orang yang tidak ada di [A-Za-z0-9]. Kemudian Anda harus bereksperimen untuk melihat urutan mana yang harus digunakan dalam argumen keduabase64.b64decode()
Pembaruan 3 : Jika data Anda adalah "rahasia perusahaan":
(a) Anda harus mengatakannya di awal
(b) kami dapat mencari cara lain untuk memahami masalah, yang kemungkinan besar terkait dengan karakter apa yang digunakan sebagai pengganti +
dan /
dalam alfabet pengkodean, atau dengan format lain atau karakter asing.
Salah satu cara tersebut adalah dengan memeriksa apa karakter non- "standar" dalam data Anda, mis
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, '-_')
? Itu apriori, tanpa Anda repot-repot menyediakan data sampel apa pun, solusi Python yang paling mungkin untuk masalah Anda. "Metode" yang diusulkan adalah saran DEBUG, SEHARUSNYA "untung-untungan" mengingat kurangnya informasi yang diberikan.