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.p、file2.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壓力已經下線了)
  4. 運行出結果

國外大神開發的P-CODE解碼工具 De-PCode Online Utility

Matlab的加密編程語言——P Code

可知實際P-code的安全性和隱蔽性還是有點堪憂的,其主要的目的在個人分享的過程可以提供一種簡單的代碼保護方式(上面的解碼器目前是不存在的),而非一種代碼的發行方式。


分享到:


相關文章: