python 加密 变量 (可用于深度学习模型加密)
需求:
深度学习基于pytorch,模型需要加密。
查看到网上有使用cryptography加密的方法,如 https://blog.csdn.net/weixin_43508499/article/details/124390983 , 总体思路是调用torch的save函数将模型保存为io.BytesIO ,然后使用cryptography 将 保存为 io.BytesIO 的字节进行加密,解密时先 解密 字节 然后调用torch.load 加载 ,即 io.BytesIO(解密字节) 。
本文提供另一种思路。
使用pickle和cryptography加密model变量,然后读取model变量。
代码为:
import pickle
from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
a = pickle.dumps(model)
b = f.encrypt(a)
pickle.dump(b,open("model",'wb'))
c = pickle.load(open("model",'rb'))
d = pickle.loads(Fernet(key).decrypt(c))
流程简述就是:
- 生成密钥 Fernet.generate_key() 。
- 将model变量转为字节。pickle.dumps。
- 加密字节,并保存变量字节变量b ,f.encrypt。
- 将字节变量b保存为文件,pickle.dump。
--加密步骤结束--
--开始解密步骤-- - 读取加密文件,字节变量c,pickle.load。
- 解密字节变量c,并将字节转为变量d,pickle.loads。
变量 model 和变量 d 是一样的。
另外也可以搭配使用python的io库。