Форум сайта python.su
Добрый день! подскажите как решить проблему появления вот такой ошибки
input strings must be a multiple of 16 in length
код следующий
import sys
from Crypto.Cipher import AES
try:
wafile=sys.argv
except:
print (“Usage: %s <msgstore.db.crypt>”) % __file__
sys.exit(1)
key = “346a23652a46392b4d73257c67317e352e3372482177652c”.decode('hex')
cipher = AES.new(key,1)
open ('msgstore.db',“wb”).write(cipher.decrypt(open(wafile,“rb”).read()))
Офлайн
У тебя старая версия pycrypto. В новой версии может быть 24-байтный (192-битный) ключ.
Отредактировано py.user.next (Март 3, 2018 12:48:26)
Офлайн
py.user.nextспасибо за подсказку! номером версии не поделитесь которую искать? заранее спасибо
У тебя старая версия pycrypto. В новой версии может быть 24-байтный (192-битный) ключ.
Офлайн
Я перепутал здесь. Тут дело не в ключе, а в тексте (про ключ сообщение другое обычно). Насчёт версии pycrypto всё, что я сказал, отменяется. Версию оставь.
У тебя строка текста для раскодирования не выравнивается по длине в 16 байт. То есть расшифровывать надо по блокам, кратным длине 16 байт. Обычно надо файл читать блоками по 1024 байта (ну это примерно, можно и по 2048). Если у тебя файл шифровался таким же образом, то его длина должна быть кратной 16. Если же он шифровался таким же образом и его длина не кратна 16, то, возможно, файл повреждён и куда-то что-то пропало или, наоборот, откуда-то что-то добавилось.
А грузить всё содержимое файла в память, как у тебя это делается, это неправильно, так как памяти может не хватить. Нужно и читать блоками, и писать блоками. Тогда файлы любой длины можно обработать, даже если оперативной памяти немного.
Отредактировано py.user.next (Март 4, 2018 00:39:31)
Офлайн
спасибо! буду в этом напрвлении копать
Офлайн