"Phần đệm không chính xác" có thể không chỉ có nghĩa là "phần đệm bị thiếu" mà còn (tin hay không) "phần đệm không chính xác".
Nếu các phương pháp "thêm phần đệm" được đề xuất không hoạt động, hãy thử xóa một số byte ở cuối:
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
Cập nhật: Mọi thao tác liên quan đến việc thêm phần đệm hoặc xóa các byte có thể không hợp lệ khỏi phần cuối nên được thực hiện SAU KHI xóa bất kỳ khoảng trắng nào, nếu không các phép tính độ dài sẽ bị ảnh hưởng.
Sẽ là một ý kiến hay nếu bạn cho chúng tôi xem một mẫu (ngắn) dữ liệu mà bạn cần khôi phục. Chỉnh sửa câu hỏi của bạn và sao chép / dán kết quả của print repr(sample)
.
Cập nhật 2: Có thể quá trình mã hóa đã được thực hiện theo cách an toàn với url. Nếu đúng như vậy, bạn sẽ có thể thấy các ký tự dấu trừ và gạch dưới trong dữ liệu của mình và bạn sẽ có thể giải mã nó bằng cách sử dụngbase64.b64decode(strg, '-_')
Nếu bạn không thể nhìn thấy các ký tự dấu trừ và gạch dưới trong dữ liệu của mình, nhưng có thể thấy các ký tự dấu cộng và dấu gạch chéo, thì bạn đang gặp một số vấn đề khác và có thể cần thủ thuật thêm phần đệm hoặc xóa dấu gạch ngang.
Nếu bạn không thể thấy dấu trừ, dấu gạch dưới, dấu cộng và dấu gạch chéo trong dữ liệu của mình, thì bạn cần xác định hai ký tự thay thế; chúng sẽ là những cái không có trong [A-Za-z0-9]. Sau đó, bạn sẽ cần thử nghiệm để xem chúng cần được sử dụng theo thứ tự nào trong lập luận thứ 2 củabase64.b64decode()
Cập nhật 3 : Nếu dữ liệu của bạn là "công ty bí mật":
(a) bạn nên nói như vậy lên phía trước
(b) chúng ta có thể khám phá những con đường khác trong việc tìm hiểu vấn đề, đó là rất có khả năng có liên quan đến những gì nhân vật được sử dụng thay cho +
và /
trong bảng chữ cái mã hóa, hoặc theo định dạng khác hoặc các ký tự không liên quan.
Một trong những cách như vậy sẽ là kiểm tra những ký tự không "chuẩn" nào trong dữ liệu của bạn, ví dụ:
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, '-_')
? Đó là điều tiên quyết, mà bạn không cần phải cung cấp bất kỳ dữ liệu mẫu nào, giải pháp Python có khả năng nhất cho vấn đề của bạn. Các "phương pháp" được đề xuất là đề xuất GỬI, "trúng và bỏ sót" NECESSARILY do thông tin được cung cấp rất ít.