问题描述
我想在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)