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

本站现有博文321篇,共被浏览764933

本站已经建立2443天!

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