簡體   English   中英

如何在 Python 中加密 pickled 文件?

[英]How to encrypt a pickled file in Python?

我有一個使用矢量化器的 ml 模型。 此矢量化器包含敏感數據,並使用 pickle 作為 .pkl 文件存儲。

如何加密此 pkl 文件,以便它需要密鑰才能解密?

我嘗試使用以下代碼進行加密。

def encrypt_file(filepath, key):
    f = Fernet(key)
    with open(filepath, "rb") as file:
        # read all file data
        file_data = file.read()

    # encrypt data
    encrypted_data = f.encrypt(file_data)

    with open(filepath, "wb") as file:
        file.write(encrypted_data)


def decrypt_file(filepath, key):
    f = Fernet(key)
    with open(filepath, "rb") as file:
        encrypted_data = file.read()
        
    decrypted_data = f.decrypt(encrypted_data)
    return decrypted_data

當我在 txt 文件上使用該函數時,它起作用了。 問題是pkl文件好像沒有加密,不解密也能用。

我也無法讓它正確加密/解密 pickle 文件。 它給了我扭曲的解密數據。

所以我做了下一件事,切換庫。 pyAesCrypt完全按照您的意願行事,因此您不必重新發明輪子。

請參閱此示例代碼:

import pickle
import pyAesCrypt


def create_pickle(picklefile):
    data = {"data": "random"}
    with open(picklefile, "wb") as outfile:
        pickle.dump(data, outfile)


password = "please-use-a-long-and-random-password"
picklefile = "somefile.pkl"
picklefile_enc = f"{picklefile}.aes"
create_pickle(picklefile)

# encrypt
pyAesCrypt.encryptFile(picklefile, picklefile_enc, password)
# decrypt
pyAesCrypt.decryptFile(picklefile_enc, f"2_{picklefile}", password)

with open(f"2_{picklefile}", "rb") as infile:
    print(pickle.load(infile))

輸出

{'data': 'random'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM