使用python加密和保护文件

问题描述

我想在python3程序中创建一个文件,我想在其中存储一些我不希望用户看到或操作的信息。但是,在执行时我需要读取和修改内容,确保用户无法修改文件内容。我怎样才能做到这一点?

解决方法

存储在最终用户设备上的所有信息最终都可以被操纵。
一种选择是存储您不希望用户在网络服务器上操作的数据,并在需要时检索/更新它。 这种方法的缺点是您的代码无法脱机工作。

,

您可以将私人信息存储在一个 python 对象中,例如字典等然后编译(.py-->.pyc),加密源文件(.py-->.py.cpt)最后发布仅编译后的文件,可选择使用其加密对(同时将加密密钥安全地保留给您自己)。

您可能会找到更多详细信息 here

,

在这个例子中,我使用了 Fernet 和一个用密码“hardcode”创建的密钥。 您可以仅在必要时加密文件并解密其中的信息。 如果需要修改信息,只需再次调用加密函数即可。

from cryptography.fernet import Fernet
import base64,hashlib


def encrypt(filename,key):
    f = Fernet(key)
    with open(filename,"rb") as file:
        # read the encrypted data
        file_data = file.read()
    # encrypt data
    encrypted_data = f.encrypt(file_data)
    # write the encrypted file
    with open(filename,"wb") as file:
        file.write(encrypted_data)
    
    
def decrypt(filename,"rb") as file:
        # read the encrypted data
        encrypted_data = file.read()
    # decrypt data
    decrypted_data = f.decrypt(encrypted_data)
    print(decrypted_data)

my_password = 'mypassword'.encode()
key = hashlib.md5(my_password).hexdigest()
key_64 = base64.urlsafe_b64encode(key.encode("utf-8"))

# file name
file = "test.txt"
# encrypt it
encrypt(file,key_64)
with open("test.txt","rb") as f:
    print(f.read())
decrypt(file,key_64)