Функция декодирования выдает ошибку, которая не будет исправлена ​​путем ее кодирования - PullRequest
0 голосов
/ 16 мая 2019

Мой код шифрует файл, а вторая часть расшифровывает его.Он отлично работает с TXT-файлами, но если я добавлю .docx, он выдаст ошибку, которую я не могу понять, как решить.Ниже приведена основная часть кода, с которой мне нужна помощь.

Я уже делал кодирование и декодирование, используя примеры с этого сайта, но он не работает, просто выдает ту же ошибку.

dwdfa = input('Enter the entire file directory plus extension you wish to decrypt:')
dodf = open(dwdfa,"r+").read()
a = len(dodf)
dfirst = dodf[a-2]+dodf[a-1]+dodf[:a-2]
for i in dfirst:
    dsecond = (chr(ord(i) - 5))
    Word.append(dsecond)
    dsecond = ''.join(Word)
print(dsecond)
new = open(dwdfa + "1", "w")
new.write(dsecond)

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

UnicodeDecodeError: 'charmap'Кодек не может декодировать байт 0x81 в позиции 18: символ отображается на

Если возможно, попробуйте упрощенный ответ, так как я не понимаю преобразования байтов в строку или что-то еще в этом роде.R + там, чтобы открыть файл, если нужно, я добавлю бит шифрования.

1 Ответ

0 голосов
/ 16 мая 2019

docx - это двоичный формат (точнее, zip-архив, содержащий XML-файлы), поэтому его необходимо обрабатывать как bytes, а не string в Python.

Если вы хотите просто зашифровать произвольные файлы (например, изображения, исполняемые файлы), вам нужно будет переписать функцию для работы с байтами вместо символов (например, что -5 цезарь (chr(ord(i) - 5)) будет (i - 5 + 256) % 256, и добавьте b к флагам вызовов open(). Текстовые файлы будут по-прежнему оставаться текстовыми, если они не содержат Unicode (который будет поврежден). Зашифрованные docx-файлы будут бессмысленными, поэтому их нельзя открыть в Word до расшифровки.

Но если вы хотите работать с text ваших файлов docx, вам понадобится специальная библиотека docx (например, https://python -docx.readthedocs.io / en / latest / ). Обратите внимание, что выполнение обработки на месте (без изменения форматирования и компоновки) может быть нетривиальным.

...