EADST

Encrypt ONNX Model

ONNX model can be encrypted with the following code, which can be compiled with a .so file to improve code safety.

import hashlib
from Crypto import Random
from Crypto.Cipher import AES

def load_graph(path):
    with open(path, 'rb') as f:
        protobuf_byte_str = f.read()
    return protobuf_byte_str


def encrypt_file(raw, _key):
    bs = 32
    key = hashlib.sha256(_key.encode()).digest()
    s = raw
    raw = s + str.encode((bs - len(s) % bs) * chr(bs - len(s) % bs))
    iv = Random.new().read(AES.block_size)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return (iv + cipher.encrypt(raw))


def decrypt_file(enc, _key):
    key = hashlib.sha256(_key.encode()).digest()
    iv = enc[:AES.block_size]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    s = cipher.decrypt(enc[AES.block_size:])
    return s[:-ord(s[len(s) - 1:])]


def main():
    input_path = 'test.onnx'
    output_path = 'test_encode.onnx'
    _key = 'Password123!'

    # encode
    nodes_binary_str = load_graph(input_path)
    nodes_binary_str = encrypt_file(nodes_binary_str, _key)
    with open(output_path, 'wb') as f:
        f.write(nodes_binary_str)

    # decode
    nodes_binary_str = load_graph(output_path)
    nodes_str_decrypt = decrypt_file(nodes_binary_str, _key)

    session = onnxruntime.InferenceSession(nodes_str_decrypt)
    # ort_inputs = {session.get_inputs()[0].name: onnx_input}
    # outputs = session.run(None, ort_inputs)


if __name__ == "__main__":
    main()
相关标签
About Me
XD
Goals determine what you are going to be.
Category
标签云
printf PyCharm VPN Color Card RGB transformers Proxy Knowledge Data Python Safetensors Statistics LaTeX Linux Quantize EXCEL CV Password Anaconda torchinfo 公式 Gemma 报税 Baidu PDB ONNX UI CEIR Plate LLM Permission Pandas Firewall NLTK 多进程 Ubuntu PyTorch Datetime tqdm C++ Video COCO Math 净利润 Review Distillation Windows Sklearn Git TensorRT Vim Pickle Google Numpy Conda Land UNIX DeepStream GPT4 TensorFlow LeetCode Random Disk InvalidArgumentError git Cloudreve Diagram 多线程 Dataset VSCode Augmentation Qwen2.5 Quantization Github Image2Text CC YOLO Breakpoint QWEN Bin API tar IndexTTS2 Django Interview LLAMA Clash Template Markdown XML XGBoost Ptyhon 证件照 BTC Excel CUDA HaggingFace uWSGI WAN VGG-16 FP8 Docker 飞书 Qwen2 SAM Transformers CSV Bitcoin GIT Paddle DeepSeek Jetson 签证 SVR logger Tensor WebCrawler Michelin GGML Jupyter OpenAI Logo ResNet-50 Use Attention Paper Domain Algorithm Plotly NameSilo 腾讯云 PIP LoRA ModelScope HuggingFace OCR Pytorch Hotel Hilton Vmess PDF 财报 scipy llama.cpp JSON Web Crawler Magnet Miniforge Food Input RAR Tiktoken v0.dev Nginx mmap Tracking uwsgi CAM Zip Qwen git-lfs Llama ChatGPT 继承 Shortcut FP32 SQL FP64 SQLite 关于博主 域名 Base64 NLP Animate 搞笑 SPIE 音频 Bipartite TSV Website BeautifulSoup TTS BF16 FlashAttention GoogLeNet Mixtral 算法题 v2ray Translation FastAPI Bert hf FP16 diffusers Streamlit GPTQ Heatmap AI Claude 阿里云 Pillow CTC MD5 OpenCV Hungarian CLAP 版权 Freesound
站点统计

本站现有博文309篇,共被浏览736416

本站已经建立2373天!

热门文章
文章归档
回到顶部