首页 > 解决方案 > 无论文件是什么类型,如何使用 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>

标签: pythonencryptioncryptography

解决方案


您必须以二进制模式打开文件以进行读取和写入。由于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)


推荐阅读