浅谈深度学习模型如何保护--AES加密文件流的实现(带源码)

本文探讨如何保护项目中的数据、模型和资源文件,重点介绍在Windows环境下利用AES加密文件流来保护模型文件。通过两种方法,一是嵌入资源文件到二进制并加壳,二是加密文件并在加载前解密。文章详细讲解了实现自定义输入流的streambuf,以及AES-OFB加密解密流的实现,并提供了源码下载链接。
摘要由CSDN通过智能技术生成

通常,我们会遇到项目中的一些数据、模型、资源文件保护问题,以防被人挪用,或者泄露流重要、敏感信息。本文即讨论这种外部资源文件的保护,以Windows环境下的模型文件的保护为例:(如果是linux,方法一不可行,只能将方法一用字节数组加载,参考https://blog.csdn.net/flyingleo1981/article/details/8193964

主要考虑两种方法,一种是将外部资源文件嵌入二进制文件中(exe、dll、lib),然后将二进制文件加壳保护,这种方法开发量小,仅需要将资源文件嵌入并在运行时加载。

二是将外部文件加密,加密方法可以自定义,在加载模型文件前解密,考虑到安全性,防止解密后的模型文件暴露于内存被轻易dump,考虑使用流式加密的方法进行加解密,由此相对安全一点。

由于项目加载模型文件采用的是c++的文件流进行,而加载模型文件的方法封装成了库,所以这两种问题中都涉及一个问题是继承实现一个输入流,无论是从内存中加载还是解密后加载。其中嵌入资源文件的方法有个简单但安全性不高效率略低的做法可以避开继承输入流,即直接将嵌入资源重新加载到内存后将内存中的数据先写入某个流再从中读取。

继承iostream实现自定义都流输入输出,重点在于实现自定义的streambuf管理用于输入输出的缓冲区,因为根据继承关系,fstream、stringstream都是从源(file、string)处读取/写入至streambuf中,当streambuf已全部读取/写满溢出,则完成缓冲区的更新/序列化,因而关键是实现streambuf中的buf管理。有几篇博文讲的比较清楚,这里不再复述:

最全面的资料当然是官方流的说明文档:

http://hradec.com/ebooks/C%20Stuff/%5BCHM%5D%20C++%20Standard%20Library.%20A%20Tutorial%20and%20Reference/_chapter%2013.htm#ch13lev1sec13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值