首页 > 解决方案 > 如何正确恢复使用 aes-everywhere 编码的文件?

问题描述

晚安。

所以,我正在 python 3 中开发一个脚本来加密我的备份文件。我在恢复文件时遇到了加密问题。为了准确举例说明我在做什么,部分假设一个“example.txt”文件,其唯一内容是单词“Test”。一个 5 字节的文件。第一点:我使用aes-everywhere进行加密。因此,要读取和加密文件中的数据:

with open("example.txt", "rb") as archive:
    data = archive.read()
original_data = aes256.encrypt(data.decode(), "MyKey")
# Encrypt and overwrite:
with open("example.txt", "wb") as archive:
    archive.write(original_data)

有一个 decode() 因为文件是以字节为单位读取的,但是函数 encrypt() 需要一个字符串。到目前为止,一切都很好。打开文件(现在为 44 字节),内容将如下所示:U2FsdGVkX18mxZYHtNTojCiYaQtUMHJwXi2Hbmez950=按照命令恢复数据。它几乎相同:

with open("example.txt", "rb") as archive:
    data = archive.read()
recovered_data = aes256.decrypt(data, "MyKey")
# Decrypt and overwrite:
with open("example.txt", "wb") as archive:
    archive.write(recovered_data)

问题从这里开始。在某些文件中,我收到以下错误:'utf-8' codec can't decode byte 0xa8 in position 0: invalid start byte。我尝试使用不同的编码(ANSI、UTF-8 等),但错误仍然存​​在。我阅读的主题:

  1. utf-8-codec-cant-decode-byte-0xa0-in-position-4276-invalid-start-byte
  2. 如何解决 unicodedecodeerror-utf-8-codec-cant-decode-byte-0xff-in-position
  3. python3-fix-unicodedecodeerror-utf-8-codec-can-t-decode-byte-in-position
  4. 如何修复错误-UnicodeDecodeError-utf-8-codec-cant-decode-byte

还有一些,但它们都在其他语言中或多或少地重复相同的事情。在其他文件中,没有发生错误,但保存的数据没有恢复。出现奇怪的字符,就好像您写入了随机字节并且没有检索到原始字符。(与在文本编辑器中打开可执行文件时出现的相同。)我想我正在保存数据字节的字节。我做了一些测试,试图在保存文件的方法中使用不同的 encode()/decode() 组合,但我无法恢复原始数据或得到任何非常不同的结果。有小费吗?作为参考,我在 Fedora 34 上使用 Python 3.9.5。我只是在尝试编码/恢复具有以下扩展名的小文件:

txt、pdf、odt、xls、png、jpg、jpeg、epub、mp3、gif、doc、odp、ods、mp4

标签: pythonencryptionencodingcryptography

解决方案


推荐阅读