2016-07-31 2 views
2

У меня есть код base64 шифровать, и я не могу расшифровать в python3.5Как декодировать base64 в Python3

import base64 
code = "YWRtaW46MjAyY2I5NjJhYzU5MDc1Yjk2NGIwNzE1MmQyMzRiNzA" # Unencrypt is 202cb962ac59075b964b07152d234b70 
base64.b64decode(code) 

Результат:

binascii.Error: Incorrect padding 

Но это же сайт (base64decode) может декодировать it,

Пожалуйста, кто-нибудь может сказать мне, почему и как использовать python3.5 декодировать его?

Благодаря

ответ

5

Base64 нужна строка с длиной, кратной 4. Если строка короткий, он дополняется от 1 до 3 =.

import base64 
code = "YWRtaW46MjAyY2I5NjJhYzU5MDc1Yjk2NGIwNzE1MmQyMzRiNzA=" 
base64.b64decode(code) 
# b'admin:202cb962ac59075b964b07152d234b70' 
0

В соответствии с этим answer, вы можете просто добавить необходимое дополнение.

code = "YWRtaW46MjAyY2I5NjJhYzU5MDc1Yjk2NGIwNzE1MmQyMzRiNzA" 
b64_string = code 
b64_string += "=" * ((4 - len(b64_string) % 4) % 4) 
base64.b64decode(b64_string) #'admin:202cb962ac59075b964b07152d234b70' 
+0

Ответ, который я дал, добавляет соответствующее заполнение, основанное на длине закодированной строки. Пожалуйста, примите ответ, если вы сочтете это полезным. –

0

Это на самом деле, кажется, только в том, что code некорректно padded (code неполно)

import base64 
code = "YWRtaW46MjAyY2I5NjJhYzU5MDc1Yjk2NGIwNzE1MmQyMzRiNzA" 
base64.b64decode(code+"=") 

возвращает b'admin:202cb962ac59075b964b07152d234b70'

0

Я пробовал наоборот. Если вы знаете, что такое незашифрованное значение:

>>> import base64 
>>> unencoded = b'202cb962ac59075b964b07152d234b70' 
>>> encoded = base64.b64encode(unencoded) 
>>> print(encoded) 
b'MjAyY2I5NjJhYzU5MDc1Yjk2NGIwNzE1MmQyMzRiNzA=' 
>>> decoded = base64.b64decode(encoded) 
>>> print(decoded) 
b'202cb962ac59075b964b07152d234b70' 

Теперь вы видите правильное заполнение. b'MjAyY2I5NjJhYzU5MDc1Yjk2NGIwNzE1MmQyMzRiNzA=

Смежные вопросы