Matlab的加密编程语言——P Code

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.pfile2.p 等。要将当前文件夹中的所有 .m 源文件转换为 P 代码文件,请使用以下命令:

  • pcode *.m

P-code安全性

那么Matlab的P-code的完全性咋样呢,首先我们需要了解P-code的工作方式,从m语言变成P-code再到Matlab运行出结果主要发生了以下步骤

  1. 读取m语言源码,将其转换为实际Matlab运行用的代码(Matlab运行过程好像是会对代码语句进行一定的转换,但是这种转换是很快的)。
  2. 将上述代码用AES算法进行加密得到P-Code。(AES的密钥Mathworks已知,因此可知该加密密码不是完全随机生成,大家用的都是一个密钥,当然随机生成的话,你换台电脑就跑不了)。
  3. 对P-code进行解密得到Matlab运行用的代码。(实际已经有国外大神完成了这一步骤,制作了P-Code的解码器,但是由于Mathworks压力已经下线了)
    De-PCode Online Utility
  4. 运行出结果

可知实际P-code的安全性和隐蔽性还是有点堪忧的,其主要的目的在个人分享的过程可以提供一种简单的代码保护方式(上面的解码器目前是不存在的),而非一种代码的发行方式。

 

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注