"잘못된 패딩"은 "누락 된 패딩"뿐만 아니라 (믿거 나 말거나) "잘못된 패딩"을 의미 할 수 있습니다.
제안 된 "패딩 추가"메소드가 작동하지 않으면 후행 바이트를 제거해보십시오.
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-safe 방식으로 수행되었을 수 있습니다. 이 경우 데이터에서 마이너스 및 밑줄 문자를 볼 수 있으며 다음을 사용하여 디코딩 할 수 있어야합니다.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
base64.b64decode(strg, '-_')
? 샘플 데이터를 제공하지 않아도 문제에 대한 가장 가능성있는 Python 솔루션 인 선험적입니다. 제안 된 "방법"은 제공된 정보의 부족을 감안할 때 반드시 "히트 앤 미스"DEBUG 제안이었습니다.