[英]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.