「パディングが正しくない」とは、「パディングがない」ことだけでなく、「信じられないかもしれませんが」「パディングが正しくない」ことも意味します。
「パディングの追加」メソッドが機能しない場合は、後続のバイトをいくつか削除してみてください。
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, '-_')
データにマイナス文字とアンダースコア文字は表示されないが、プラス文字とスラッシュ文字は表示される場合は、別の問題があり、追加パディングまたは削除クリフトトリックが必要になる可能性があります。
データにマイナス、アンダースコア、プラス、スラッシュがまったく表示されない場合は、2つの代替文字を特定する必要があります。それらは[A-Za-z0-9]にないものになります。次に、それらの2番目の引数で使用する必要がある順序を確認するために実験する必要がありますbase64.b64decode()
アップデート3:あなたのデータが「機密会社」である場合:
()あなたがそう言うべきアップフロント
(b)は、我々は文字がの代わりに使用しているものに関連している可能性が高い問題、理解する上で、他の道を探ることができます+
し、/
中にエンコーディングアルファベット、または他のフォーマットまたは無関係な文字。
そのような方法の1つは、データに「非標準」文字が含まれているかどうかを調べることです。たとえば、
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ソリューションです。提案された「方法」はデバッグの提案であり、提供された情報が不足しているため、必然的に「ヒットアンドミス」になります。