如何快速加密MATLAB代码 | pcode
图图今天教大家如何利用P代码对MATLAB的源代码(.m文件)进行加密。
MATLAB代码加密
我们为什么要对代码进行加密? 大多数的MATLAB用户都在进行复杂算法的设计,或者非常个性化的GUI软件开发,这一过程通常非常费时费力,甚至需要严格保密。如果我们想让其他人用上自己开发的代码(所实现的功能),又不想让对方知道源代码,就需要对代码进行加密。


MATLAB出了2种加密.m文件的解决方案:
A 生成独立应用程序
使用MATLAB Compiler将源代码文件生成独立应用程序(.exe),将.exe分发给其它人。

B 生成P代码
将某些或全部源代码文件转换为一种名为P代码的文件(文件扩展名为 .p)。P代码内的内容是无法查看的。
A方案的优点是安全性高,但是打包的独立应用程序安装包非常大,需要安装匹配MATLAB版本的runtime环境才能运行(runtime需要另外安装,通常有1G左右大小),且并非所有的内容都能很好的打包,比如图图的FigureBest软件天生不能打包成.exe文件运行。这样打包的应用非MATLAB用户基本无法使用。
B方案的优点是非常灵活,可以加密部分代码或者全部代码(下方展示了部分加密的代码),无论是加密还是最终运行速度都极快。但是缺点也很明显,就是安全性比较低,破解是可能的。

P代码
本期推送里仅教大家使用P代码进行加密,关于MATLAB Compiler的使用后面有机会再补充。
p意思是预解析(preparsed version)。即将.m文件里的代码预解析一遍,生成p文件。当再次调用时,实际上调用的就是.p文件。当MATLAB将某文件转换为p代码文件时,该文件将进行模糊处理而非加密。虽然.p文件中的内容难以理解,但不应将其视为安全的。(真正的大大大大佬是可以破解的,不过可能会被M公司狠狠地处理;对于我们这些小白就和加密是一样的。)

p代码转换相比打包成独立应用要简单和方便很多,如果你只是想小范围的分享你的代码又不想别人知道你的实现细节,就可以考虑用p代码的形式实现。

p代码如何生成
m代码到p代码的转换是通过调用pcode函数实现。
pcode(fun)
对 fun.m 中的代码进行模糊处理并生成名为 fun.p 的文件,即所谓的p文件。如果fun是一个文件夹,则该文件夹中的所有脚本或函数文件都在p文件中进行模糊处理。MATLAB 在当前文件夹中创建p文件。原始的 .m 文件或文件夹可以位于搜索路径上的任何位置。
pcode(fun1,...,funN)
从列出的文件创建p文件。如果输入了任意个文件夹,则 MATLAB 为各文件夹所包含的每个 .m 文件创建一个p文件。
pcode(fun,'-inplace')
在脚本或函数文件所在的同一个文件夹中创建p文件。

p代码如何调用
调用方式和.m文件一模一样,只不过不能直接双击打开.p文件。创建好.p文件后将同名的.m文件移出+备份以避免冲突!
注意:在执行中 P 文件优先于对应的 MATLAB 代码文件。
- 公众号后台回复`全家桶`获取所有作品;
- 图图的MATLAB交流群:1129425848;