python - 如何正确恢复使用 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 等),但错误仍然存在。我阅读的主题:
- utf-8-codec-cant-decode-byte-0xa0-in-position-4276-invalid-start-byte
- 如何解决 unicodedecodeerror-utf-8-codec-cant-decode-byte-0xff-in-position
- python3-fix-unicodedecodeerror-utf-8-codec-can-t-decode-byte-in-position
- 如何修复错误-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
解决方案
推荐阅读
- angular - Angular中条件数据的茉莉花测试用例问题
- c - 使用 sqrt 函数时的链接器问题 (C, gcc)
- git - 源树 - 如何恢复推送的提交
- php - SYmfony - 403 - 禁止:访问被拒绝。或者将应用程序代码上传到新服务器时只是空白页
- bash - 在意外标记“fi”附近出现语法错误
- python - python django长轮询等待
- python - CircleCI 和 Config.yml 的问题没有找到 requirements.txt 和 dev_requirements.txt
- discord.js - discord.js 类似门票的机器人错误 - 'TypeError: fn.bind is not a function'
- java - 在groovy(java)中如何自动找出json字段类型并从json返回值,用空格替换null?
- c# - UseSqlServer 中的连接字符串