我的代码对文件进行加密,第二部分将对其解密。它可以很好地与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 +可以打开文件,如果需要,请添加加密位。
答案 0 :(得分:0)
docx是二进制格式(准确地说是包含XML文件的zip归档文件),因此需要在Python中以bytes
而不是string
的形式进行处理。
如果您想简单地加密任意文件(例如,图像,可执行文件),则需要重写该函数以使用字节而不是字符(例如,-5凯撒移位(chr(ord(i) - 5))
为{{ 1}},并将(i - 5 + 256) % 256
添加到b
调用的标志中,然后文本文件将仍然是文本文件,除非它们包含Unicode(将被破坏)。加密的docx文件将变得乱七八糟,因此除非解密,否则无法在Word中打开它们。
但是,如果您要处理docx文件的 text ,则需要一个特殊的docx库(例如https://python-docx.readthedocs.io/en/latest/)。请注意,就地进行处理(保留格式和布局不变)可能并不容易。