加密模型与资源
加密 AI 模型与其他二进制资产,并在运行时读取它们,全程不落盘。
magiclock protect-model 把模型、权重文件或任意资源加密成一个 .enc 信封。你的应用在运行时用 bootstrap() + open_model() 在内存中解密——明文字节从不落盘。
加密一个模型
shell
magiclock protect-model models/face.onnx # -> models/face.onnx.enc
magiclock protect-model weights/net.pt --feature ai_model -o net.enc--feature 指定解锁它所需的授权能力,默认是 ai_model。加密你的代码里的有效期(--trial / --expires-in / --expires-at)、便携档(--no-bind-machine、--passphrase、--emit-key)和 --lock-passphrase 参数在这里同样适用。
在运行时读回它
python
import magiclock
import onnxruntime
magiclock.bootstrap() # 针对这台机器的授权把闸门立起来
model_bytes = magiclock.open_model("models/face.onnx.enc") # 明文只存在于内存中
session = onnxruntime.InferenceSession(model_bytes)不管信封里装的是什么,open_model() 的用法都一样——ONNX、PyTorch state dict、原始权重数组,或者配置包、数据集这类任意二进制资源。传进去的是 bytes,读出来的也是 bytes。
函数参考
| 签名 | 说明 | |
|---|---|---|
magiclock.bootstrap() | bootstrap(vault_dir=None, *, app_version="1.0.0") -> MagicLockRuntime | 在任何 open_model()(或被门控的代码)运行前调用一次即可。magiclock build 会在编译产物的入口自动帮你插入这个调用——只有普通(未编译)脚本才需要你手动调用。这台机器尚未激活时会抛出异常。 |
magiclock.open_model() | open_model(path, *, vault_dir=None, passphrase=None, key=None) -> bytes | 自动识别机器锁定与便携两种信封。便携或二因子产物请传入 passphrase/key,而不是走交互式提示。 |
异常与边界情况详见完整的 Python API 参考。
每一次都只在内存中
解密后的模型字节只在你持有引用期间存在于进程内存里——open_model() 从不把明文副本写到磁盘、临时目录或任何其他地方。如果你的推理框架需要的是文件路径而不是字节,请把它放在内存态的位置(比如内存文件对象),而不是自己把它写出去,否则明文就会落到 MagicLock 保护范围之外的磁盘上。