2017-01-08 4 views
-3

В настоящее время я работаю с проблемой программирования, где мне нужно вырезать текст base64 из строки, декодировать ее, а затем делать больше веселья.python base64decode error между строками

Я сделал первый бит, удалив текст base64 и сохранив его в плоском файле, я делаю второй проход над ним, и я получаю ошибку заполнения.

print(base64.b64decode(next)) 
File "/usr/lib/python2.7/base64.py", line 78, in b64decode 
raise TypeError(msg) 
TypeError: Incorrect padding 

Теперь код, который я написал очень простой

o.write(str(i) + ". "+base64.b64decode(next)+"\n\r") 

и первые 36 строк правильно декодировать, но 37, 38 и т.д. не являются. Ниже приведены два примера

Line 36: QVNDLChzZWxlY3QgKGNhc2UgZmllbGQoY29uY2F0KHN1YnN0cmluZyhiaW4oYXNjaWkoc3Vic3RyaW5nKHBhc3N3b3JkLDksMSkpKSw3LDEpKSxjaGFyKDQ4KSxjaGFyKDQ5KSkgd2hlbiAxIHRoZW4gc2xlZXAoMikgd2hlbiAyIHRoZW4gc2xlZXAoNCkgIGVuZCkgZnJvbSBtZW1icmVzIHdoZXJlIGlkPTEp =

декодирует до 36.

ASC,(select (case field(concat(substring(bin(ascii(substring(password,9,1))),7,1)),char(48),char(49)) when 1 then sleep(2) when 2 then sleep(4) end) from membres where id=1) 

линия 37: QVNDLCh zZWxlY3QgKGNhc2UgZmllbGQoY29uY2F0KHN1YnN0cmluZyhiaW4oYXNjaWkoc3Vic3RyaW5nKHBhc3N3b3JkLDEwLDEpKSksMSwxKSxzdWJzdHJpbmcoYmluKGFzY2lpKHN1YnN0cmluZyhwYXNzd29yZCwxMCwxKSkpLDIsMSkpLGNvbmNhdChjaGFyKDQ4KSxjaGFyKDQ4KSksY29uY2F0KGNoYXIoNDgpLGNoYXIoNDkpKSxjb25jYXQoY2hhcig0OSksY2hhcig0OCkpLGNvbmNhdChjaGFyKDQ5KSxjaGFyKDQ5KSkpd2hlbiAxIHRoZW4gVFJVRSB3aGVuIDIgdGhlbiBzbGVlcCgyKSB3aGVuIDMgdGhlbiBzbGVlcCg0KSB3aGVuIDQgdGhlbiBzbGVlcCg2KSBlbmQpIGZyb20gbWVtYnJlcyB3aGVyZSBpZD0xKQ =

Я тестировал строку 37 в онлайн base64 декодер (base64decode.org) и он работает

ASC,(select (case field(concat(substring(bin(ascii(substring(password,10,1))),1,1),substring(bin(ascii(substring(password,10,1))),2,1)),concat(char(48),char(48)),concat(char(48),char(49)),concat(char(49),char(48)),concat(char(49),char(49)))when 1 then TRUE when 2 then sleep(2) when 3 then sleep(4) when 4 then sleep(6) end) from membres where id=1) 

Есть ли что-то очевидно, что я делаю неправильно?

ответ

3

Ну, обивка на

QVNDLChzZWxlY3QgKGNhc2UgZmllbGQoY29uY2F0KHN1YnN0cmluZyhiaW4oYXNjaWkoc3Vic3RyaW5nKHBhc3N3b3JkLDEwLDEpKSksMSwxKSxzdWJzdHJpbmcoYmluKGFzY2lpKHN1YnN0cmluZyhwYXNzd29yZCwxMCwxKSkpLDIsMSkpLGNvbmNhdChjaGFyKDQ4KSxjaGFyKDQ4KSksY29uY2F0KGNoYXIoNDgpLGNoYXIoNDkpKSxjb25jYXQoY2hhcig0OSksY2hhcig0OCkpLGNvbmNhdChjaGFyKDQ5KSxjaGFyKDQ5KSkpd2hlbiAxIHRoZW4gVFJVRSB3aGVuIDIgdGhlbiBzbGVlcCgyKSB3aGVuIDMgdGhlbiBzbGVlcCg0KSB3aGVuIDQgdGhlbiBzbGVlcCg2KSBlbmQpIGZyb20gbWVtYnJlcyB3aGVyZSBpZD0xKQ =

является неправильный, так как он имеет длину 467, которая не делится на 4, а Base64 encodes 3 source octets as 4 symbols. Это просто some Base64 implementations don't care about padding (по-видимому, включая онлайн-инструмент, который вы использовали), в то время как другие реализации (по-видимому, включая Python) действительно заботятся.

QVNDLChzZWxlY3QgKGNhc2UgZmllbGQoY29uY2F0KHN1YnN0cmluZyhiaW4oYXNjaWkoc3Vic3RyaW5nKHBhc3N3b3JkLDEwLDEpKSksMSwxKSxzdWJzdHJpbmcoYmluKGFzY2lpKHN1YnN0cmluZyhwYXNzd29yZCwxMCwxKSkpLDIsMSkpLGNvbmNhdChjaGFyKDQ4KSxjaGFyKDQ4KSksY29uY2F0KGNoYXIoNDgpLGNoYXIoNDkpKSxjb25jYXQoY2hhcig0OSksY2hhcig0OCkpLGNvbmNhdChjaGFyKDQ5KSxjaGFyKDQ5KSkpd2hlbiAxIHRoZW4gVFJVRSB3aGVuIDIgdGhlbiBzbGVlcCgyKSB3aGVuIDMgdGhlbiBzbGVlcCg0KSB3aGVuIDQgdGhlbiBzbGVlcCg2KSBlbmQpIGZyb20gbWVtYnJlcyB3aGVyZSBpZD0xKQ = =

работы.

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