python - 无论文件是什么类型,如何使用 Python 加密任何文件?
问题描述
所以我尝试读取文件并加密其内容,cryptography.fernet
但有时文件包含无法通过该库中使用的任何算法加密的字符。我还尝试了一个名为的库pyAesCrypt
,它具有此功能:pyAesCrypt.encryptFile("data.txt", "data.txt.aes", password)
. 但它也无法加密某些文件类型,如 gif。我对后台发生的加密算法了解不多,但是有什么方法可以加密所有文件,无论它们包含什么字符?或者也许首先对它们进行编码以摆脱这些字符然后加密它们?我只是根据我对这个主题的一些小知识给出想法。
我尝试使用 Fernet 库的代码:
from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
with open(filename, "r") as file:
file_data = file.read()
encrypted_data = f.encrypt(file_data.encode()).decode()
with open(filename, "w") as file:
file.write(encrypted_data)
当我用 GIF 尝试这个时,我得到:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 466: character maps to <undefined>
解决方案
您必须以二进制模式打开文件以进行读取和写入。由于encrypt
方法期望字节作为参数,因此无论文件类型如何,您都可以加密任何文件。
from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
with open(filename, "rb") as file:
file_data = file.read()
encrypted_data = f.encrypt(file_data)
with open(filename, "wb") as file:
file.write(encrypted_data)
推荐阅读
- android - 当应用程序在 Kotlin 中处于前台时未显示通知
- sql - 如何在sql中的数据透视表中获取非字母顺序的行
- javascript - 尝试在 Kafka 中设置消费者和生产者
- sql - Querydsl——使用 postgresql 的值
- docker - Apache PredictionIO - Docker 运行失败
- java - 单元测试 Springboot MockMvc 返回 403 Forbidden
- python - 对每一行的熊猫列进行排序
- apache-kafka - 执行更改 kafka 主题分区号,与其他主题发生 UnknownServerException
- twitter - Twitter:当我使用 https://github.com/JoeMayo/LinqToTwitter 作为身份验证用户时,我没有得到任何 webhook
- wordpress - 具有不同列表样式的 WordPress 菜单