python使用cryptography.fernet加密文件和读写

使用场景

使用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

你可能感兴趣的:(python,开发语言,cryptography,fernet,加密)