Matlab作为一款科研工具,采用的时脚本语言–M语言进行编程和运行,脚本语言的特性就是其不需要编译就可以运行,因此大家也通常直接使用原始语言进行程序的分享,从科学成果沟通共享的角度来看,这样是更有利于科技的发展的。
但是实际情况下,在Matlab下完成一套平台或者工具的开发同样是非常费时费力的,直接给出完整的代码很容易让他人拥有抄袭的机会,而且有时候我们分享的目的是为了演示功能而不是给出解题思路。
针对这种需求,Matlab给出了2种解决办法
- 以 P 代码的形式部署 – 将您的某些或全部源代码文件转换为一种名为 P 代码文件(文件扩展名为
.p
)的掩盖内容的格式,并以此格式来分发您的应用程序代码。当 MATLAB 将某文件转换为 P 代码文件时,该文件将进行模糊处理而非加密。虽然.p
文件中的内容难以理解,但不应将其视为安全的。建议不要使用 P 代码文件以便保护您的知识产权。(ps:MATLAB 不支持将实时脚本或实时函数转换为 P 代码文件) - 编译为二进制格式 – 使用 MATLAB Compiler 编译您的源代码文件以生成独立应用程序。将后者分发给应用程序的最终用户。
P-code实现方式
其中p代码转换相比二进制编译是相当简单和方便的,如果你只是想小范围的分享你的代码又不想别人知道你的实现细节,就可以考虑用P代码的形式实现。P代码转换是通过调用pcode函数实现
请在 MATLAB 命令行窗口中输入以下命令:
- pcode file1 file2, …
该命令生成文件 file1.p
、file2.p
等。要将当前文件夹中的所有 .m
源文件转换为 P 代码文件,请使用以下命令:
- pcode *.m
P-code安全性
那么Matlab的P-code的完全性咋样呢,首先我们需要了解P-code的工作方式,从m语言变成P-code再到Matlab运行出结果主要发生了以下步骤
- 读取m语言源码,将其转换为实际Matlab运行用的代码(Matlab运行过程好像是会对代码语句进行一定的转换,但是这种转换是很快的)。
- 将上述代码用AES算法进行加密得到P-Code。(AES的密钥Mathworks已知,因此可知该加密密码不是完全随机生成,大家用的都是一个密钥,当然随机生成的话,你换台电脑就跑不了)。
- 对P-code进行解密得到Matlab运行用的代码。(实际已经有国外大神完成了这一步骤,制作了P-Code的解码器,但是由于Mathworks压力已经下线了)
De-PCode Online Utility
- 运行出结果
可知实际P-code的安全性和隐蔽性还是有点堪忧的,其主要的目的在个人分享的过程可以提供一种简单的代码保护方式(上面的解码器目前是不存在的),而非一种代码的发行方式。