使用场景
使用pyinstaller打包程序,需要打包一些文件。
这些文件用户不可以查看内容,只有程序可以对文件进行读写操作。
即文件在本地是加密的,用户无法读取内容,程序内置了密钥可以对文件正常读写。
安装cryptography
pip install cryptography -i https://pypi.tuna.tsinghua.edu.cn/simple/
demo
from cryptography.fernet import Fernet
import pickle
class DataEncryptor():
__key = b'3uOYrH2oXnF1fN9d2m5yq2v9pNp3Z8g2V9M8fGQg6hI='
__fileName = f'data.pickle'
def __init__(self):
self.fernet = Fernet(self.__key)
def save_data(self, texts, labels):
data = {
'texts': texts,
'labels': labels,
}
# 将数据序列化为 pickle 字节流
pickled_data = pickle.dumps(data)
# 加密 pickle 字节流
encrypted_data = self.fernet.encrypt(pickled_data)
# 将加密后的数据保存到文件
with open(self.__fileName, 'wb') as file:
file.write(encrypted_data)
def load_data(self):
# 从文件中读取加密的 pickle 数据
with open(self.__fileName, 'rb') as file:
encrypted_data = file.read()
# 解密 pickle 数据
decrypted_data = self.fernet.decrypt(encrypted_data)
# 将解密后的 pickle 字节流反序列化为数据
unpickled_data = pickle.loads(decrypted_data)
return unpickled_data['texts'], unpickled_data['labels']
def test():
texts = ['i am happy', 'so surprising', 'sadly']
labels = [1, 1, 0]
de = DataEncryptor()
de.save_data(texts, labels)
texts1, labels1 = de.load_data()
print(texts1, labels1)
if __name__ == "__main__":
test()
可以根据自己的需求设置DataEncryptor中的文件名,密钥和数据格式。
加密效果
直接打开pickle文件,内容如下,说明被加密后无法正确获取数据
gAAAAABkmZoVPBosJ1kc3OyKohdKWVdQ1N_C3S_ponNBJ-0eLnqyLiYf6FookUE8iLD3JSA4QcOxCtwJyrDXLfUd7XDr7KfuwlJieCMvvAGlGlctIOkUP7ziVgrnSDNT-gFI3xmiuAezQZJr7gwx32w90go-X-P8HuQClRUJXPRq8j_zif2JJH65HQ0aSmw_GWBNWT_g6FSF